如果我将两个事件处理程序绑定到同一个元素的同一个事件,会发生什么?
例如:
var elem = $("...")
elem.click(...);
elem.click(...);
最后一个处理程序“获胜”,还是两个处理程序都会运行?
如果我将两个事件处理程序绑定到同一个元素的同一个事件,会发生什么?
例如:
var elem = $("...")
elem.click(...);
elem.click(...);
最后一个处理程序“获胜”,还是两个处理程序都会运行?
两个处理程序都会运行,jQuery 事件模型允许一个元素上有多个处理程序,因此后面的处理程序不会覆盖旧的处理程序。
假设您有两个处理程序f和g,并且想要确保它们以已知且固定的顺序执行,那么只需将它们封装起来:
$("...").click(function(event){
f(event);
g(event);
});
这样(从 jQuery 的角度来看)只有一个处理程序,它以指定的顺序调用f和g。
jQuery 的 .bind() 按照绑定的顺序触发:
当事件到达一个元素时,所有绑定到该元素的事件类型的处理程序都会被触发。如果注册了多个处理程序,它们将始终按照绑定的顺序执行。执行完所有处理程序后,事件将沿着正常的事件传播路径继续。
来源:http : //api.jquery.com/bind/
因为 jQuery 的其他函数(例如.click()
)是 的快捷方式.bind('click', handler)
,我猜它们也是按照绑定的顺序触发的。
您应该能够使用链接来按顺序执行事件,例如:
$('#target')
.bind('click',function(event) {
alert('Hello!');
})
.bind('click',function(event) {
alert('Hello again!');
})
.bind('click',function(event) {
alert('Hello yet again!');
});
我猜下面的代码正在做同样的事情
$('#target')
.click(function(event) {
alert('Hello!');
})
.click(function(event) {
alert('Hello again!');
})
.click(function(event) {
alert('Hello yet again!');
});
来源:http : //www.peachpit.com/articles/article.aspx?p= 1371947& seqNum=3
TFM还说:
当事件到达一个元素时,所有绑定到该元素的事件类型的处理程序都会被触发。如果注册了多个处理程序,它们将始终按照绑定的顺序执行。执行完所有处理程序后,事件将沿着正常的事件传播路径继续。
两个处理程序都被调用。
您可能正在考虑内联事件绑定(例如"onclick=..."
),其中一个很大的缺点是只能为一个事件设置一个处理程序。
jQuery 符合DOM Level 2 事件注册模型:
DOM 事件模型允许在单个 EventTarget 上注册多个事件侦听器。为了实现这一点,事件侦听器不再存储为属性值