Bonjour,

Je cherche à modifier un évènement en lui fournissant une variable.
Je précise que la page est en XHTML Strict.

Voici un exemple simple : soit un élément possédant, à l'origine, un évènement "onclick"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<... id="MonObjet" onclick = "MaFonction('titi');"...>
Suite à un traitement AJAX, je veux changer "titi" en "toto" (mise à jour de la donnée dans la bdd par exemple).
Là où cela se complique c'est que "toto" est donc issu d'une variable.

Pour cela, j'ai utilisé plusieurs méthodes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// Méthode 1
Variable = "toto";
Item = document.getElementById("MonObjet");
Item.setAttribute("onclick", "MaFonction('" + Variable + "');");
J'ai ajouté des "Item.getAttribute("onclick");" avant et après la modification pour voir la différence.

Sous FF : cela fonctionne. Les getAttribute affichent : "MaFonction('titi');" puis "MaFonction('toto');"

Sous IE : rien ne se passe (sans erreur). Les getAttribute affichent : "function anonymous() { MaFonction('titi'); }" puis "MaFonction('toto');"


Cette méthode n'étant pas, à priori, la plus propre (les évènements ne se gérant pas comme les attributs) j'ai essayé la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// Méthode 2
Variable = "toto";
Item = document.getElementById("MonObjet");
Item.onclick = "MaFonction('" + Variable + "');";
Sous FF : la fonction n'est pas modifiée (getAttributes identiques avec 'titi') mais fonctionne toujours (avec la valeur "titi" bien sûr)

sous IE : Comme la méthode 1

J'ai donc recherché du coté du "fonction anonymous..." et j'ai fait un premier essai en codant le "toto" en dur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// Méthode 3
Variable = "toto";
Item = document.getElementById("MonObjet");
Item.onclick = function() { Test('toto'); };
Sous FF : le code reste inchangé mais cela fonctionne Je ne sais pas où il a collé la fonction

Sous IE : le getAttribute après modif vaut "function() { Test('toto'); };". Cela fonctionne mais je ne peux dire (contrairement à FF) si le code à été modifié ou non

J'en suis là car la méthode 4 consisterait à remplacé le "toto" en dur par la variable mais je vois pas trop comment.

Merci (ne serait-ce que d'avoir lu jusque là )