在MDC的网站上,他们有一个cool demo of dispatchEvent可以在我的Chrome 15中正常工作。
我正在尝试获取一个事件对象并将其传递给dispatchEvent,并设置a simple case here,您将事件记录为数组,然后重播它们。
本质上,我设置了一个窗口监听器进行点击,然后预先形成window.dispatchEvent(recordedEvent)
。
我无法确定为什么来自事件侦听器的事件对象不会像MDC示例中initMouseEvent
的事件那样预先形成。
我并不担心让它发挥作用,我想知道为什么这不起作用,当reading the funny manual之后似乎意味着它应该发挥作用。
答案 0 :(得分:3)
它似乎对我来说很好; here是一个更新。
编辑 - 等待 - 您是否关注它正在返回true
,就像调用“preventDefault()”一样?如果是这样,那么我现在理解你的困惑。
最后编辑好的我想我看到了这个问题。当您派遣活动时,您始终从window
发送。如果您涉及keep track of the elements,那么它就可以了。
这是适用的好代码(对我来说,在Firefox 7中):
//Vars for the elements we're working with
var replay = document.getElementById("replay");
var replaying = false;
//Handler to record events into a data array.
var handler = function (e) {
if (replaying) {
console.log("replay " + e.type);
}
else if (e.target.tagName.toLowerCase() !== 'input') {
return;
}
else {
handler.data.push({elem: e.target, event: e});
console.log(handler.data);
}
};
handler.data = [];
//Listen for the click on the replay button
replay.addEventListener("click", function(){
//Remove listeners so we don't create some crazy
//infinite paradox with turtles all the way down
// window.removeEventListener("click", handler);
replaying = true;
//Clear the textbox out
var status = [], obj;
//Dispatch a bunch of stored up events
for (var i=0; i<handler.data.length;i++){
obj = handler.data[i];
status.push(obj.elem.dispatchEvent(obj.event));
}
console.log(status);
replaying = false;
});
//Listen for some specific events
//window.addEventListener("keyup", handler);
window.addEventListener("click", handler);
另请注意,最好避免在“重播”按钮本身上保存“点击”事件。