2
jQuery(document).on('click', 'a[id^="MenuFilterVar_"]', onClickHandler);
jQuery(document).off('click', 'a[title="Special Case Element"]'); 

上記のコードは、 のセレクターに一致する要素にイベントをアタッチしon()ます。ただし、off()次の行 (これらの元の要素内の特殊なケースの要素) でイベントを削除すると、1 行目の要素のすべてのイベントが削除されます。

私の理解でoff()は、セレクターを満たすアイテムからのみイベントを削除する必要があります。の理解に欠けているものon/offがありますか、それともコードに何か問題がありますか? どんな助けでも大歓迎です。

4

2 に答える 2

2

セレクターを変更すると、うまくいくはずです。

jQuery('a[id^="MenuFilterVar_"]').on('click', onClickHandler);
jQuery('a[title="Special Case Element"]').off('click');

http://jsfiddle.net/dboots/4rDgP/1/

于 2012-11-29T19:46:19.657 に答える
1

.off委任されたイベントでは、 と同じセレクターを使用する必要があるようです.on。以下はjQueryドキュメントからのものです...

特定の委任されたイベント ハンドラーを削除するには、セレクター引数を指定します。セレクター文字列は、イベント ハンドラーがアタッチされたときに .on() に渡されたものと正確に一致する必要があります。委任されていないイベントを削除せずに、すべての委任されたイベントを要素から削除するには、特別な値「**」を使用します。

http://api.jquery.com/off/

要素が 1 つだけの場合は、その条件を簡単に追加できます。下記参照、

デモ: http://jsfiddle.net/4rDgP/4/

function onClickHandler() {
    alert($(this).text());
}

jQuery(document).on('click', 'a[id^="MenuFilterVar_"]', function() {
    if (this.title == 'Special Case Element') return;   
    onClickHandler.call(this);
});

または複数の要素の場合は、無視したい要素に別のハンドラーをバインドして、e.stopImmediatePropagation(). 下記参照、

デモ: http://jsfiddle.net/4rDgP/3/

jQuery(document).on('click', 'a[title="Special Case Element"]', function (e) {
     e.stopImmediatePropagation();
}); 
jQuery(document).on('click', 'a[id^="MenuFilterVar_"]', onClickHandler);    

e.stopImmediatePropagation();は、実際のハンドラー バインディングの上にある必要があることに注意してください。

于 2012-11-29T20:06:36.030 に答える