0

我的DOM结构如下,

<a id='c_1' class='like'>Like</a>
<a id='c_2' class='like'>Like</a>
<a id='c_3' class='like'>Like</a>
......

绑定click事件如下,

$(document).on("click",".like",function(){
      var selector = $(this);
      saveLikes(selector);       
});

saveLikes(selector)Ajax通话,success通话Ajax时我想删除/取消绑定click当前单击的元素上的事件,因为我在success回调中编写了以下代码。

$(document).off("click",selector);

它不起作用,我可以删除click事件, $(document).off("click",".like");但我不希望这样做,因为进一步点击其他元素不会触发事件。

他们是否有任何解决方案可以在不更改类名的情况下仅删除当前元素上的事件?

4

5 回答 5

2

在这种情况下,您

$(document).on("click",".like",function(){
    var selector = $(this);
    if(selector.data('liked')){
        return;
    }

    saveLikes(selector);     
    selector.data('liked', true)
});

或者

$(document).on("click",".like:not(.liked)",function(){
    var selector = $(this).addClass('liked');
    saveLikes(selector);     
});
于 2013-07-02T06:41:58.503 回答
1

这个...

$('#foo').unbind('click', function() {
    alert('The quick brown fox jumps over the lazy dog.');
});

参考:.unbind()

于 2013-07-02T06:36:35.513 回答
1

也许这会有所帮助

$( "#foo" ).one( "click", function(){
    alert( "This will be displayed only once.");
});

Click事件仅针对该特定 ID 执行一次并自动解除绑定。

参考.one()

于 2014-03-11T10:44:09.813 回答
0

如果你愿意,add click event once那么你可以使用one()

喜欢,

$('.like').one("click",function(){
      var selector = $(this);
      saveLikes(selector);       
});
于 2013-07-02T06:38:51.920 回答
0

更新代码

$(".like").click(function() {
    var selector = $(this);
    saveLikes(selector);
    selector.off('click');       // <- Put this in Ajax success
});
于 2013-07-02T06:32:20.717 回答