oK, donc j'en ai quelques-uns, ce qui peut finir par être pour ce forum des questions trop novices concernant la gestion d'événements discrète.Problèmes de gestion des événements (Javascript)
Si je comprends bien, un document mis en place correctement ressemblerait à quelque chose comme ceci:
<html>
<head>
<title>Title</title>
<script src="jsfile.js" type="text/javascript></script>
</head>
<body>
//Body content, like some form elements in my case
</body>
</html>
Jsfile.js ressemblerait à quelque chose comme ceci:
function a() {
//code;
}
function b()...
window.addEventListener('load', a, false);
document.getElementById("id").addEventListener('click', b, false);
document.myForm.typeSel.addEventListener('change', c, false);
//or to use better browser-compatible code...
function addEvent(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
addEvent(window, 'load', a);
addEvent(document.getElementById('id'), 'click', b);
addEvent(document.myForm.typeSel, 'change', c);
Si je comprends bien, tout en Dans la tête, le navigateur va charger ce code javascript, en ajoutant chacun de ces gestionnaires d'événements à leurs éléments respectifs. TOUTEFOIS ... Tandis que le gestionnaire de fenêtre est ajouté correctement, aucun des autres ne l'est. Mais s'il est placé dans une fonction, la méthode (par exemple) getElementById d'accès à un élément fonctionne correctement, et le gestionnaire d'événements est ajouté. Donc, je pourrais concevoir une fonction loadEvents() qui est appelée via window onload, qui contient toutes les fonctions addEvent() pour les autres éléments de document pour lesquels j'ai besoin de gestionnaires d'événements. Mais si je comprends bien le tout, je ne devrais pas avoir à faire cela.
En outre, si je devais coller le code addEvent dans le corps ainsi que l'élément auquel il répond, comme ...
<input type="checkbox" id="test" />
<script type="text/javascript>
document.getElementById("test").onclick = func;
</script>
... il fonctionne très bien. Mais bien sûr, cela viole également toute la raison de la suppression des gestionnaires d'événements en ligne!
Alors question étant: Pour utiliser "élément .addEventListener (clic, func, false)", "addEvent (élément 'cliquez sur', func)", ou même "élément .onclick = func "- comment puis-je référencer avec succès un élément à la fin d'un fichier script dans la tête, sans avoir à le coller dans une autre fonction? Pourquoi getElementById et d'autres méthodes ne fonctionnent pas en dehors d'une fonction dans la tête?
Ou, y a-t-il une faille dans ma compréhension sous-jacente?
Merci beaucoup. Je me bousculais pour ne pas y penser. J'étais même allé jusqu'à mettre une alerte dans ma fonction addEvent(), pour découvrir quel objet avait été envoyé via l'argument, et découvert qu'il était "indéfini". J'aurais dû le comprendre logiquement. Tant pis. En outre, merci pour le lien vers la page Yahoo - Je suis toujours à la recherche de moyens pour m'assurer que je suis en train de coder selon les normes les plus élevées, comme la mise à jour discrète javascript ... la première place! – David
Pas besoin de vous lancer :) Pour moi, la programmation est toujours un mélange de logique et d'essais et d'erreurs. Je pense que c'est comme ça pour la plupart des gens, sinon nous n'aurions pas autant de frameworks de tests de logiciels. En ce qui concerne le codage selon les normes les plus élevées ... Je ne sais pas, il est certainement bon d'être conscient de ce que vous faites, et pourquoi vous le faites. Mais ce qui est considéré comme un standard élevé d'un POV peut être désapprouvé par un autre. –