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"
Suite à un traitement AJAX, je veux changer "titi" en "toto" (mise à jour de la donnée dans la bdd par exemple).
Code : Sélectionner tout - Visualiser dans une fenêtre à part <... id="MonObjet" onclick = "MaFonction('titi');"...>
Là où cela se complique c'est que "toto" est donc issu d'une variable.
Pour cela, j'ai utilisé plusieurs méthodes
J'ai ajouté des "Item.getAttribute("onclick");" avant et après la modification pour voir la différence.
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 + "');");
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 :
Sous FF : la fonction n'est pas modifiée (getAttributes identiques avec 'titi') mais fonctionne toujours (avec la valeur "titi" bien sûr)
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 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
Sous FF : le code reste inchangé mais cela fonctionne
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'); };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à)
Partager