任何人都可以解释使用相同签名定义事件处理程序的结果,例如:
// event handler 1
$('form.custom select[data-customforms!=disabled]').on('change', function() {
console.log('1');
});
// event handler 2
$('form.custom select[data-customforms!=disabled]').on('change', function() {
console.log('2');
});
这是一种不好的做法吗?执行的顺序是什么?是否有与此相关的浏览器特定行为?可以扩展Javascript中的事件处理程序吗?
答案 0 :(得分:1)
两个处理程序将随后运行。 如果您为处理程序命名,而不是将它们设为匿名,则可以单独销毁它们(无需为“更改”事件完全删除所有处理程序)。
答案 1 :(得分:1)
结果将是所有附加事件将按顺序执行。这通常用于在特定事件上执行多个函数。
在上述情况下,第一个1
将在控制台中记录,然后2
,与其应用的顺序相同。
缺点是当您删除change
事件时,将删除附加到该事件的所有事件处理程序(在您的情况下,两个处理程序都带有console.log语句)
您可以使用event namespacing来解决此问题。
答案 2 :(得分:1)
JQuery允许元素上的多个事件处理程序。这意味着它不会覆盖旧的。我不确定执行的顺序,但它可能是随机的。
答案 3 :(得分:0)
JQuery对于set事件使用 bind 表示添加到事件而不替换事件以进行替换必须首先删除Event然后设置。