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

上面的代码将一个事件附加到满足选择器中的元素on()。但是,当我off()在后续行中删除事件时(这些原始元素中的特殊情况元素),它会从第一行中删除元素的所有事件。

据我了解,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 回答