Javascript / JQuery中的相同签名事件处理程序

时间:2013-02-06 07:09:32

标签: javascript jquery events

任何人都可以解释使用相同签名定义事件处理程序的结果,例如:

// 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中的事件处理程序吗?

4 个答案:

答案 0 :(得分:1)

两个处理程序将随后运行。 如果您为处理程序命名,而不是将它们设为匿名,则可以单独销毁它们(无需为“更改”事件完全删除所有处理程序)。

答案 1 :(得分:1)

结果将是所有附加事件将按顺序执行。这通常用于在特定事件上执行多个函数。

在上述情况下,第一个1将在控制台中记录,然后2,与其应用的顺序相同。

缺点是当您删除change事件时,将删除附加到该事件的所有事件处理程序(在您的情况下,两个处理程序都带有console.log语句)

您可以使用event namespacing来解决此问题。

答案 2 :(得分:1)

JQuery允许元素上的多个事件处理程序。这意味着它不会覆盖旧的。我不确定执行的顺序,但它可能是随机的。

答案 3 :(得分:0)

JQuery对于set事件使用 bind 表示添加到事件而不替换事件以进行替换必须首先删除Event然后设置。