それは私にはうまく機能しているようです。ここに更新があります。
編集true
—待機— 「preventDefault()」が呼び出されたかのように返されるという事実について懸念がありますか?もしそうなら、私はあなたの混乱を今理解しています。
最後に編集OK問題が発生したと思います。イベントをディスパッチするときは、常にからディスパッチし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);
また、「再生」ボタン自体に「クリック」イベントを保存しないようにすることをお勧めします。