1

假设我有一个带有 id 的按钮:

<input id='someButton' />

我想在这个按钮上附加一个事件监听器:

$('#form').on('click', '#someButton', function() { 
   alert("My listener called"); 

});

然而,我不知道,之前有人为这个按钮写了一个事件监听器:

$('#form').on('click', '#someButton', function() { 
   alert("Some other listener called"); 
});

我遇到了一些有效地执行与上述相同操作的代码,并且似乎注册的第一个侦听器就是使用的侦听器。我是否正确假设 jQuery 将始终调用在特定 id 上注册的第一个事件侦听器(并且只有那个侦听器)?

4

2 回答 2

7

不正确。jQuery 将按照绑定的顺序调用绑定到元素的所有事件侦听器。

要删除现有的事件处理程序,请使用.off()

$('#form').off('click'); // click event handler(s) removed
$('#form').off(); // all event handler(s) removed

但是请注意,从祖先 DOM 元素委托的事件不会以这种方式被删除。

于 2013-03-12T18:41:13.563 回答
0

你可以使用mousedown:

$('#form').on('mousedown', '#someButton', function() { 
    alert("My listener called"); 
});

希望这有帮助。

于 2013-03-12T18:52:00.467 回答