如果我将多个事件处理程序附加到单个DOM元素上的单个事件,那么事件处理程序是否保证按添加顺序调用?或者我不应该依赖这种行为?
在使用Prototype处理点击事件时,我遇到了一个奇怪的问题.如果单击下面代码中的按钮,它将触发三个警报:"单击1","单击2"和"单击3".现代浏览器将按照它们注册的顺序调用侦听器,而IE8(也可能是旧的IE版本)将以相反的顺序调用它们.我发现这很奇怪,因为我认为Prototype维护并执行了一个侦听器队列,这应该是浏览器独立的.这不是这样吗?如果没有,事件监听器是否应按某种顺序运行,或者它们是异步的,因此它们的顺序无关紧要?
<button id="button">Click me</button>
<script type="text/javascript">
$('button').observe('click', function(event) {
alert('Click 1');
});
$('button').observe('click', function(event) {
alert('Click 2');
});
$('button').observe('click', function(event) {
alert('Click 3');
});
</script>
Run Code Online (Sandbox Code Playgroud)