jQuery/JavaScript如何处理绑定到同一元素的多个事件处理程序&事件,以及后果
How does jQuery/JavaScript handle multiple event handlers bound to the same element & event, and what are the consequences?
考虑以下代码:
$('div').click(function(){
$(this).animate({height:100}, 500)
$(this).css({opacity:1});
});
对比:
$('div').click(function(){
$(this).animate({height:100}, 500);
})
.click(function(){
$(this).css({opacity:1});
});
jQuery或JavaScript本质上是将第二个代码样本"编译"成类似于第一个的东西,而不是维护两个单独的事件处理程序吗?我问jQuery或JavaScript是否能做到这一点,因为我也想知道这样的"编译"是原生JS的一个功能还是jQuery实现的。
在我看来,这种"编译"实际上并没有完成,至少在某种程度上没有消除两个代码示例之间的差异。使用JSPerf,我比较了每个样本之间的速度,发现第一个代码样本的速度要快得多。
处理程序按绑定顺序激发,每个$('div').click()
将另一个处理程序绑定到有问题的元素。在您的情况下,第一个只绑定1个事件处理程序,因此执行速度更快,因为它只触发一个事件。第二个绑定两个事件处理程序,因此速度较慢,因为它触发两个事件而不是一个(开销更大)。
我认为它们被维护为两个独立的事件。当被触发时,它们将按照绑定时的相同顺序执行。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 异步处理所有事件处理程序的方法
- jsplumb中的Click事件处理程序丢失“;这个“;对象
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 如何在事件处理程序的回调中防止Default