【发布时间】:2014-07-31 19:03:25
【问题描述】:
当我使用dispatchEvent 模拟鼠标事件时,事件侦听器的调用顺序与真实鼠标事件不同。特别是,在同一目标上的 capture 侦听器之前调用了一些 bubble 侦听器。
这里有一个小提琴来说明我的意思:http://jsfiddle.net/soney/8stNc/2/
我在里面写道:
function logFN(message) {
return function() {
console.log(message);
};
}
var event_type = "click";
addEventListener(event_type, logFN("Capture 1"), true);
addEventListener(event_type, logFN("Bubble 1"), false);
addEventListener(event_type, logFN("Capture 2"), true);
addEventListener(event_type, logFN("Bubble 2"), false);
var ev = document.createEvent("MouseEvent");
ev.initMouseEvent(event_type, true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
dispatchEvent(ev);
使用模拟鼠标事件(如上面代码中产生的),顺序是:
Capture 1
Bubble 1
Capture 2
Bubble 2
对于实际鼠标事件,顺序是我所期望的:
Capture 1
Capture 2
Bubble 1
Bubble 2
我已经在最新版本的 Chrome、Firefox 和 Safari 中对此进行了测试。所有三个浏览器都产生相同的行为,因此它可能不是错误。谁能解释为什么顺序不同以及如何使用模拟事件生成“真实”顺序?
【问题讨论】:
标签: javascript google-chrome firefox safari dom-events