11548 sujets

JavaScript, DOM et API Web HTML5

Salut à tous,

j'ai un script qui utilise la méthode setAttribute de la façon suivante (dans une boucle sur l'entier i):

boxTitle.setAttribute('onmouseover','montre("smenu'+i+'");');


ce qui a les effets que je souhaite dans FireFox mais pas dans IE : que dois-je faire?

J'ai essayé en ajoutant :

boxTitle.onmouseover = montre("smenu"+i);


mais apparemment la valeur de la variable i n'est pas récupérée.

Merci!
Modifié par erwanadam (29 Jun 2008 - 12:41)
Salut,

Il faut affecter une fonction à onmouseover. Par exemple une fonction anonyme :
boxTitle.onmouseover = function() { montre("smenu" + i); };

Modifié par Julien Royer (29 Jun 2008 - 00:42)
Merci pour ta réponse,

j'avais essayé ce que tu proposes aussi, toujours sans succès dans IE : la fonction est comprise comme montre('smenui'), ce qui n'a pas d'effet (je n'ai pas d'élément 'smenui' mais des éléments 'smenu1', 'smenu2' etc.)

J'ai fini par écrire la chose suivante :


boxTitle.setAttribute('onmouseover','montre("smenu'+i+'");');
boxTitle.i=i;
boxTitle.onmouseover = function(){montre("smenu"+this.i);};


La première ligne n'est pas interprétée dans IE, mais les deux suivantes ont le même effet.

Je ne sais pas si c'est très propre, mais ça fonctionne...
Dans la fonction anonyme utilisée pour onmouseover, i fait référence à la variable locale de la fonction de portée supérieure. On appelle cela une closure/fermeture. Tu peux t'en sortir de la façon suivante :
boxTitle.onmouseover = function(i) {
  return function() {
    montre("smenu" + i);
  };
}(i);