Javascript 使用.off()删除多个相同的事件处理程序
我分配两个事件处理程序:Javascript 使用.off()删除多个相同的事件处理程序,javascript,jquery,Javascript,Jquery,我分配两个事件处理程序: $('#myElement').on('click', '.classA', doSomething); $('#myElement').on('click', '.classB', doSomethingElse); 我想删除这两个处理程序。我知道我能做到: $('#myElement') .off('click', '.classA') .off('click', '.classB'); 我认为在一行中是可能的,但这两行都失败了: $('#myE
$('#myElement').on('click', '.classA', doSomething);
$('#myElement').on('click', '.classB', doSomethingElse);
我想删除这两个处理程序。我知道我能做到:
$('#myElement')
.off('click', '.classA')
.off('click', '.classB');
我认为在一行中是可能的,但这两行都失败了:
$('#myElement').off('click', '.classA, .classB');
$('#myElement').off('click', '.classA .classB');
有一种方法可以在一个命令中完成吗?查看源代码后,您将看到:- 这意味着选择器需要准确地描述它是如何创建的 因此,您需要使用:-
$('#myElement')。在('click','.classA',function(){alert('A');})上;
$('#myElement')。在('click','.classB',function(){alert('B');})上;
$('#myElement').off('click','.classA').off('click','.classB');
$('#myElement')。在('click','.classA',function(){alert('A');})上;
$('#myElement')。在('click','.classB',function(){alert('B');})上代码>
A.
B
在这里,您可以使用点样式的名称空间来识别单个处理程序,这很好,但由于jQuery文档将其称为“名称空间”,而且它看起来像css类,因此它更适合匹配一组处理程序。因此,如果您不区分“classA”和“classB”这两个事件,您可以对这两个事件都使用“classCommon”,然后使用“classCommon”将它们解除绑定,我刚刚在上找到了一个示例(参见页面底部的最后一个示例)
当然,正如上面其他人所建议的,所有这些都必须发生在同一个元素上。确切地说,是同一个选择器。因此,如果您的问题涉及多个HTMLElement,您需要将#myElement
更改为.elementsIwanttoHandlet一起
学习了一些新内容,您必须通过使用.on()
传递的精确/原始选择器,因此您必须使用$('#myElement')。关闭('click','classA')。关闭('click','.classB');
因此,从外观上看,我所做的基本上是一样好的,谢谢你的回答
return this.each( function() {
jQuery.event.remove( this, types, fn, selector );
}