Mot-clé de l'événement js

J'ai trouvé ce code inquiet dans chrome, ff et c.-à-d. Cependant, je ne trouve aucune référence au mot-clé de l' event "magique" sur le Web. Voir ceci

 <html> <head> <script type="text/javascript"> function handler(e) { alert(e); } </script> </head> <body> <h1 onclick="handler(event);alert(0)">Click on this text</h1> </body> </html> 

Ces scripts STOPS fonctionnent si je modifie l' event entre parenthèses vers autre chose. Est-ce un mot-clé obsolète?

L' objet Event est automatiquement transmis à tous les gestionnaires d'événements. Si vous ajoutez des gestionnaires d'événements avec addEventListener , vous pouvez choisir le nom du paramètre (comme vous l'avez fait dans handler ). Mais pour le code attaché avec l'attribut onclick , vous ne pouvez accéder à l'objet événement que par l' event variable implicite.

Si vous souhaitez en savoir plus sur la gestion des événements en général, je suggère de le lire à quirksmode.org .

Regardez également MDC – Manipulateurs d'événements :

Ce sont des propriétés qui correspondent aux attributs d'événement HTML 'on'.

Contrairement aux attributs correspondants, les valeurs de ces propriétés sont des fonctions (ou tout autre objet implémentant l'interface EventListener) plutôt qu'une chaîne. En fait, l'attribution d'un attribut d'événement en HTML crée une fonction wrapper autour du code spécifié. Par exemple, compte tenu du HTML suivant:

 <div onclick="foo();">click me!</div> 

Si element est une référence à cette div , la valeur de element.onclick est effectivement:

 function onclick(event) { foo(); } 

Notez comment l'objet d'événement est passé comme event paramètre à cette fonction wrapper.

Lorsqu'un attribut d'événement est défini, une fonction implicite est créée avec l' event comme premier argument. Lorsque l'événement se déclenche, l'objet événement est transmis à cette fonction. Il n'y avait pas une définition solide sur ce comportement jusqu'à ce que HTML 5 (qui est encore un brouillon), mais c'est ainsi depuis longtemps dans les principaux navigateurs et c'est ainsi que cela s'est fait dans les spécifications:

Lorsque l'objet Function d'un gestionnaire d'événements est invoqué, son call() doit être invoqué avec un argument, configuré à l'objet Event de l'événement en question.

Cet argument est bien nommé event pour des raisons évidentes. http://www.w3.org/TR/html5/webappapis.html#events

Cela m'a vraiment jeté. La «typo» suivante fonctionne dans Chromium, mais pas FF:

 some_worker.onmessage = function(e) { // do stuff if (e.data instanceof ArrayBuffer) intArray = new Uint8Array(event.data); // do other stuff }; 

Chromium observait le mot-clé implicite pour 'event' mais FF a lancé une erreur 'variable indéfinie'! Juste changé 'événement' à 'e' et tout va bien.

Je remarque que même le balisage de code de stackoverflow observe 'event' comme mot clé implicite … pour ne pas frapper FF, car il a détecté la faute de frappe.

Je suppose que vous essayez de transmettre l'élément HTML cliqué à votre fonction de handler() . La bonne façon de le faire, votre code est: <h1 onclick="handler(this);">Click on this text</h1>

Cependant, je recommande vivement d'éviter cette approche. Évitez d'avoir un style et un comportement définis sur le HTML. Veuillez lire l'article suivant: JavaScript discret