Il existe plusieurs façons de gérer les événements avec HTML/DOM. Il n'y a pas vraiment de bonne ou de mauvaise méthode, mais différentes méthodes sont utiles dans différentes situations.
1 : Il y a une définition dans le HTML :
<input id="clickMe" type="button" value="clickme" onclick="doFunction();" />
2 : Il faut l'ajouter à la propriété DOM de l'événement en Javascript :
//- Using a function pointer:
document.getElementById("clickMe").onclick = doFunction;
//- Using an anonymous function:
document.getElementById("clickMe").onclick = function () { alert('hello!'); };
3 : Et il y a l'attachement d'une fonction au gestionnaire d'événement en utilisant Javascript :
var el = document.getElementById("clickMe");
if (el.addEventListener)
el.addEventListener("click", doFunction, false);
else if (el.attachEvent)
el.attachEvent('onclick', doFunction);
Les deuxième et troisième méthodes autorisent les fonctions inline/anonymes et doivent toutes deux être déclarées après l'analyse syntaxique de l'élément dans le document. La première méthode n'est pas un XHTML valide car l'attribut onclick ne fait pas partie de la spécification XHTML.
La première et la deuxième méthode s'excluent mutuellement, ce qui signifie que l'utilisation de l'une (la deuxième) annule l'autre (la première). La troisième méthode vous permet d'attacher autant de fonctions que vous le souhaitez au même gestionnaire d'événement, même si la première ou la deuxième méthode a également été utilisée.
Le plus probable est que le problème se situe quelque part dans votre CapacityChart()
fonction. Après avoir visité votre lien et exécuté votre script, la fonction CapacityChart() s'exécute et les deux popups sont ouvertes (une est fermée selon le script). Où vous avez la ligne suivante :
CapacityWindow.document.write(s);
Essayez plutôt ce qui suit :
CapacityWindow.document.open("text/html");
CapacityWindow.document.write(s);
CapacityWindow.document.close();
EDIT
Quand j'ai vu votre code, j'ai pensé que vous l'aviez écrit spécifiquement pour IE. Comme d'autres l'ont mentionné, vous devrez remplacer les références à document.all
avec document.getElementById
. Cependant, vous aurez toujours la tâche de corriger le script après cela, donc je recommanderais de le faire fonctionner dans au moins IE d'abord, car toute erreur que vous faites en changeant le code pour fonctionner sur plusieurs navigateurs pourrait causer encore plus de confusion. Une fois que cela fonctionne dans IE, il sera plus facile de dire si cela fonctionne dans d'autres navigateurs pendant que vous mettez à jour le code.
7 votes
veuillez définir "ne semble pas fonctionner correctement". quelle(s) erreur(s) obtenez-vous lorsque vous cliquez dessus ?
0 votes
Le bouton fonctionne dans IE8, mais pas dans FF 3.5 en raison d'une erreur JavaScript (voir la réponse de Jeff).
1 votes
Oui, il s'avère que document.all est un élément non standard d'IE ; j'ai mis à jour ma réponse en proposant une alternative.
0 votes
@paper1337, @Jeff : La fonction n'atteint toujours pas l'effet désiré dans IE8, donc même en remplaçant document.all par document.getElementById, cela ne résoudra pas le problème.