使用.off()删除多个相同的事件处理程序

Dar*_*ney 9 javascript jquery

我分配了两个事件处理程序:

$('#myElement').on('click', '.classA', doSomething);
$('#myElement').on('click', '.classB', doSomethingElse);
Run Code Online (Sandbox Code Playgroud)

我想删除两个处理程序.我知道我能做到:

$('#myElement')
    .off('click', '.classA')
    .off('click', '.classB');
Run Code Online (Sandbox Code Playgroud)

我认为这可能在一行中,但这两个都失败了:

$('#myElement').off('click', '.classA, .classB');
$('#myElement').off('click', '.classA .classB');
Run Code Online (Sandbox Code Playgroud)

有没有办法在一个命令中执行此操作?

Ben*_*enG 3

查看源代码后,您将在以下位置看到off:-

return this.each( function() {
    jQuery.event.remove( this, types, fn, selector );
}
Run Code Online (Sandbox Code Playgroud)

这意味着选择器需要与它的创建方式完全相同。

因此你需要使用:-

return this.each( function() {
    jQuery.event.remove( this, types, fn, selector );
}
Run Code Online (Sandbox Code Playgroud)
$('#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'); });
Run Code Online (Sandbox Code Playgroud)