对我来说似乎效果很好;这是一个更新。
编辑-等待-您是否担心它返回的事实true
就像调用了“preventDefault()”一样?如果是这样,那么我现在理解你的困惑。
编辑终于确定了,我想我看到了这个问题。当你调度事件时,你总是从window
. 相反,如果您跟踪所涉及的元素,那么它就可以工作。
这是有效的代码(在 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);
另请注意,最好避免在“重播”按钮本身上保存“点击”事件。