Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用.off()删除多个相同的事件处理程序_Javascript_Jquery - Fatal编程技术网

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 );
}