This seems to work great for me; here is an update.
edit - wait - are you worried that it returns true , as if preventDefault () were being called? If so, then I understand your confusion.
finally edit ok. I think I see the problem. When you dispatch an event, you always dispatch from window . If you track items instead, then it works.
Here is a good code that works (for me in 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);
Also note that it is good to avoid saving click events on the Repeat button itself.
source share