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削除/バインド解除したい。clicksuccess

$(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 に対して 1 回だけ実行され、自動的にアンバインドされます。

リファレンス: .one()

于 2014-03-11T10:44:09.813 に答える
0

更新されたコード

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