JavaScript事件处理程序执行顺序

JavaScript事件处理程序执行顺序,javascript,events,javascript-events,standards,Javascript,Events,Javascript Events,Standards,拥有这个JS代码: document.getElementById('e1').addEventListener('click', function(){alert('1');}, false); document.getElementById('e2').addEventListener('click', function(){alert('2');}, false); document.getElementById('e1').click(); document.getElementById

拥有这个JS代码:

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false);
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false);
document.getElementById('e1').click();
document.getElementById('e2').click();
我想知道警报显示的顺序是什么-是按
单击()触发事件的顺序显示,还是随机显示

我问的是记录在案的/标准化的行为,而不是浏览器当前实现的功能。我将是1,然后是2。

警报将按顺序执行-
1
,然后执行
2
。这是因为
click
事件是同步的(请参阅)-当发出
.click()
时,处理程序将立即运行(请参阅最后一段)。所以这个代码:

document.getElementById('e1').addEventListener('click', function(){alert('1');}, false);
document.getElementById('e2').addEventListener('click', function(){alert('2');}, false);
document.getElementById('e1').click();
document.getElementById('e2').click();
alert('3');
将产生与相同的结果

alert('1');
alert('2');
alert('3');

click()不起作用;这不是引发事件的方式。您需要使用
createEvent
initEvent
dispatchEvent
。不,我不需要。在本例中,好的,但是对于所有元素上的所有事件来说,这种触发事件的方法远远不是通用的。触发事件的唯一可靠方法是使用我上面提到的三种方法。实际上,在HTML5中,你可以在任何元素上使用
单击
,但我同意浏览器目前并不普遍支持它。哦,我不知道这一点。谢谢不确定e2 click如何在e1 click之前触发警报?因为执行
click()
时,事件处理程序不会立即运行。它们在那之后运行“一段时间”——可能顺序不同。@maarons——第二个必须在第一个之后调用。唯一的缺点可能是第一条语句的冒泡导致在第二条语句调用另一条语句之前调用另一条语句。但在这种情况下,它将被调用两次,并且总是在第一次调用之后。如果侦听器设置为在捕获阶段启动,则情况可能会有所不同,但代码并不是这样做的。