Кажется, что это работает очень хорошо для меня; здесь - это обновление.
изменить & mdash; подождите - вы беспокоитесь о том, что он возвращает true
, как если бы был вызван "protectDefault ()"? Если так, то теперь я понимаю ваше замешательство.
редактировать окончательно ОК Я думаю, что вижу проблему. Когда вы отправляете событие, вы всегда отправляете с 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);
Также обратите внимание, что не следует сохранять события "click" на самой кнопке "Replay".