DispatchEvent not preforming event, mais renvoie true

Sur le site de MDC, ils ont une bonne démo de dispatchEvent qui fonctionne bien dans mon Chrome 15.

J'essaie de prendre un objet d'événement et de le passer dans dispatchEvent, et j'ai mis en place un cas simple ici où vous enregistrez des événements en tant que tableau puis les rejouer.

Essentiellement, j'ai configuré un auditeur de fenêtre pour cliquer, puis préformé window.dispatchEvent(recordedEvent) .

Je ne peux pas déterminer pourquoi mon objet d'événement de l'auditeur d'événement ne préformera pas de la même manière que l'événement depuis initMouseEvent dans l'exemple MDC.

Je ne suis pas vraiment inquiet de le faire fonctionner, je veux savoir pourquoi cela ne fonctionne pas, quand, après avoir lu le manuel drôle, cela semble impliquer qu'il devrait.

Il me semble que cela fonctionne très bien pour moi; Voici une mise à jour.

Edit – wait – est-ce que vous craignez que le retour soit true comme si "preventDefault ()" était appelé? Si c'est le cas, je comprends votre confusion maintenant.

Edit enfin OK Je pense que je vois le problème. Lorsque vous expédiez l'événement, vous expédiez toujours à partir de la window . Si, au lieu de cela, vous surveillez les éléments impliqués, cela fonctionne.

Voici le bon code qui fonctionne (pour moi dans 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); 

Notez également qu'il est bon d'éviter de sauvegarder les événements "clic" sur le bouton "Rejouer" lui-même.