3

on()を使用してイベントを割り当てた要素からイベントをバインド解除する際に問題が発生しました。

これが私のJSです:

    $(document).on('click','.reply-indicator a', function(e){
    e.preventDefault();
    var commentid = $(this).data('commentid');
    $.ajax({
        type: 'POST',
        url: '?category=getreplies',
        data:{
            "commentid" : commentid
        },
        success: function(data){
            $('.'+commentid+'subcomments').append(data);
        }
    });
    return false;
});

要素からクリックイベントを削除するために考えられるすべてのことを試しました。各要素にid属性を割り当てて、要素をターゲットにできるようにしました。

$(document).off('click','#'+commentid+'indicator a');
$('#'+commentid+'indicator a').off();

$('#'+commentid+'indicator a').off('click');

$('#'+commentid+'indicator a').unbind('click');

しかし、このコードをajaxリクエストの前に配置しようとしても、コールバック関数のイベントが失われることはありませんが、コールバック関数の後でイベントは引き続き機能します。私はそれを正しくターゲットにしようとしていますか?

4

1 に答える 1

3

デリゲートする要素にクラスを追加してみてください。特定の要素を削除する場合は、クラスを削除するだけです。

//add delegate
$(document).on('click','.reply-indicator a.onclick', function(e){
...
//remove the class from the element so it no loger matches the delegate selector
$('#'+commentid+'indicator a').removeClass('onclick');

http://jsfiddle.net/jN7LG/2/

于 2012-10-20T03:35:41.017 に答える