Envoyé par : free_zy
Date : 01/11/2005 15:16
Bonjour,
je recherche une méthode standart permettant d'externaliser de manière souple les gestionnaires d'évènements dans un fichier js à part.
Je sais qu'on peut rajouter simplement des gestionnaire d'évènement de cette manière par exemple :
<input type="button" onclick="javascript:alert('click')" value="test" />
mais dans ce cas les évenements sont mélangés avec le code HTML.
J'ai aussi essayé de faire tourner la norme du W3C : XML Event mais j'ai eu des resultats assez incomprehensibles avec par exemple le code standart suivant :
<html xmlns:ev="http://www.w3.org/2001/xml-events"> <head> <title>Exemple</title> <script type="application/x-javascript" ev:event="submit" ev:observer="form1"> alert("test form"); </script> <script type="application/x-javascript" ev:event="click" ev:observer="unbouton"> alert("test bouton"); </script> </head> <body> <button id="unbouton">Enregistrer</button><br /> <form id="form1"> <input type="submit" id="test" value="test" /><br /> </form> </body> </html>
Je n'ai peut-être aussi pas très bien compris XML Events mais le site sur le W3C me semble assez mal documenté aussi.
Concernant la gestion des événements, j'ai donc l'impression que tout est encore flou sur le sujet.
Par exemple le code suivant trouvé sur ce site :
<button id="okbutton" label="OK"/> <script> function buttonPressed(event) { alert('Le bouton a été pressé !'); } var button = document.getElementById("okbutton"); button.addEventListener('command', buttonPressed, true);
me permet efffectivement d'externaliser les gestionnaires dans un fichier à part mais ne fonctionne que sur Firefox et me semble s'écarter des standarts du W3C (XML Event par exemple).
Donc au final savez-vous quelle méthodologie est recommandée pour résoudre mon problème ?
Merci d'avance.
Envoyé par : free_zy
Date : 01/11/2005 15:25
Petite correction le code suivant ne fonctionne qu'en XUL (enfin je crois) :
var button = document.getElementById("okbutton"); button.addEventListener('command', buttonPressed, true); ^
celui ci fonctionne pour une page HTML standart :
var button = document.getElementById("okbutton"); button.addEventListener('click', buttonPressed, true) ^
Envoyé par : laurentj
Date : 04/11/2005 01:21
addEventListener est ce qu'il y a de plus standard. Cette méthode fait partie de l'interface nsIDOMEventTarget, interface qui fait partie des évènements du DOM2.
Ensuite, conçernant les évènements en eux même : qu'ils soient spécifiques ou non à une balise et que cette spécificité fasse parti d'un standard ou pas, peu importe. Tu as parfaitement le droit d'ajouter un eventlistener pour un evenement que tu as toi même créer, donc avec le nom que tu veux. Tu peux donc tres bien faire un addEventListener pour l'évènement "chplok" sur une balise quelconque. Il suffit ensuite, quand bon il te semble, de créer l'évènement "chplok" et de le dispatcher au niveau de la balise ou une de ses ancêtres.
L'évènement command est par exemple parfaitement valide. Il a été ajouté en XUL pour apporter une meilleure souplesse car un bouton, tu peux l'activer de différente façon : en cliquant dessus, par un racourci clavier, ou en mettant le focus et appuyer sur la barre espace.. Chacune de ces actions correspondent à un évènement precis (click, key etc..). Les balises XUL proposent simplements un eventlistener par défaut pour chacun de ces évènements. Ces eventlisteners ne faisant en fait que générer un autre evenement qui a pour nom "command". Cela permet en XUL d'éxecuter un traitement sur l'action d'un bouton quelque soit la façon dont on l'a activé.
Autre chose, quand tu met un attribut onclick ou autre, lors du parsing, gecko appelle simplement addEventListener avec le nom de l'évènement correspondant, le code du listener étant une fonction qui executera le javascript indiqué dans l'attribut.
bref, utilise addEventListener, y a pas plus standard que ça, et ça fonctionne parfaitement.
Je te conseille de lire le livre Rapid Application Developpement with Mozilla : le chapitre sur les évènements et commandes est trés bien expliqué (en anglais).
Envoyé par : free_zy
Date : 04/11/2005 11:06
Merci beaucoup pour ces conseils et précisions, c'est maintenant effectivement beaucoup plus clair.
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.