我分配了两个事件处理程序:
$('#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');
有没有办法在一个命令中执行此操作?
答案 0 :(得分:3)
查看来源后,您会看到off
: -
return this.each( function() {
jQuery.event.remove( this, types, fn, selector );
}
这意味着选择器必须与其创建方式完全相同。
因此您需要使用: -
$('#myElement').on('click', '.classA', function() { alert('A'); });
$('#myElement').on('click', '.classB', function() { alert('B'); });
$('#myElement').off('click', '.classA').off('click', '.classB');
$('#myElement').on('click', '.classA', function() { alert('A'); });
$('#myElement').on('click', '.classB', function() { alert('B'); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myElement">
<button class="classA">A</button>
<button class="classB">B</button>
</div>
答案 1 :(得分:0)
在这里,您使用点式命名空间来识别单个处理程序,这很好,但是因为它被称为&#34;命名空间&#34;通过jQuery文档,它看起来像css类,它更适合与一组处理程序匹配。所以如果你不区分这两个事件&#34; classA&#34;和&#34; classB&#34;,你可以使用&#34; classCommon&#34;对于他们两个,并在以后使用&#34; classCommon&#34;将它们解开绑定,我刚刚在off's document page上找到了一个示例(参见最后一个示例,位于页面底部)。
正如上面其他人所建议的那样,所有这些必须发生在同一个元素上。确切地说,选择相同的选择器。因此,如果您对多个HTMLElements提出疑问,则需要将#myElement
更改为.elementsIWantToHandleTogether
。