第一次点击后jQuery取消绑定

时间:2014-10-02 18:20:19

标签: javascript jquery javascript-events

这会导致多个按钮执行操作:

$(document).on("click", ".file-this-email", fileThisEmail);

fileThisEmail运行时,我想将其从当前的一个中移除(页面上还有其他人仍然需要它):

window.fileThisEmail = function(e) {
  console.log('this was clicked');
}

我尝试了off,但似乎无法做到正确。有什么想法吗?

4 个答案:

答案 0 :(得分:6)

在这种情况下,您必须使当前元素不再与".file-this-email"选择器匹配。

$(document).on("click", ".file-this-email", function() {
    console.log('this was clicked');
    $(this).removeClass("file-this-email");
});

另一种方法是使用相同的概念向选择器添加过滤器。

$(document).on("click", ".file-this-email:not(.clicked)", function() {
    console.log('this was clicked');
    $(this).addClass("clicked");
});

或者,不要在这种特殊情况下使用委托。委托不是一种取代直接绑定的新技术,它只是绑定事件的另一种方式。如果使用正确,它可以使代码更有效。反之亦然;如果使用不当,可能会使代码非常膨胀。

$(".file-this-email").on("click", function () {
    console.log("this was clicked");
    $(this).off("click");
});
// or even better (thanks @overachiever):
$(".file-this-email").one("click", function () {
    console.log("this was clicked");
});

答案 1 :(得分:0)

.one()方法对此有好处。 http://api.jquery.com/one/

$(document).ready(function(){
    $('.file-this-email').one('click', fileThisEmail);
});

答案 2 :(得分:0)

将各个处理程序绑定到每个元素:

$(".file-this-email").one("click",fileThisEmail);

答案 3 :(得分:0)

你应该做的是

$(document).on("click", ".file-this-email", fileThisEmail);

将此更改为

$(document).ready(function(){
  $(".file-this-email").on("click",fileThisEmail);
  $(".file-this-email").click(function(){
    $(this).off("click",fileThisEmail);
  });
 });