11540 sujets

JavaScript, DOM et API Web HTML5

Nouveau petit problème exposé à vos connaissances...

J'ai besoin de changer le onclick d'un <li> dans une fonction Javascript.

J'ai regardé sur Internet, voilà ce qu'il propose :
mon-li.onclick = "function () { mafonction(param1,param2); )"

Mais cela ne semble pas fonctionner.

Sauriez vous comment faire ?
Merci d'avance Smiley confused
Modifié par Puce (16 Aug 2007 - 13:19)
J'ai trouvé Smiley biggrin

Il s'agissait d'une faute bête :
Il faut plutot utiliser cette structure
mon-li.onclick = function () { mafonction(param1,param2); }

Il y avait une faute de parenthèse et des guillemets en trop Smiley murf

Merci quand meme Smiley lol
Puce a écrit :
J'ai trouvé Smiley biggrin

Il s'agissait d'une faute bête :
Il faut plutot utiliser cette structure
mon-li.onclick = function () { mafonction(param1,param2); }

Il y avait une faute de parenthèse et des guillemets en trop Smiley murf

Merci quand meme Smiley lol

Je me permet de rajouter une petite couche :
si tu fais :
monLi.onclick = "mafonction(param1, param2)" ça marche, mais c'est comme ci tu déclarait le onclick comme un attribut, evidement il est convertit à la volé en tant que fonction.

et comme tu l'as souligné ta structure est la bonne, et puis tu déclare une fonction. C'est comme ci tu faisait :
function toto() {}
var toto = function() {}
c'est la meme chose dans les deux cas, ici c'est pareil.

monLi.onclick = function() {}.

tu peux bien sur directement binder une fonction sur ton onclick :
function truc() {alert("blabla")}
monLi.onclick = truc;
Merci pour cette précision Smiley smile

Je ne connaissais pas cette diférence de structure pour la déclaration des fonctions.

Smiley confused

A bientot !
Hmmm

Gatsu35 a écrit :

monLi.onclick = "mafonction(param1, param2)" ça marche, mais c'est comme ci tu déclarait le onclick comme un attribut, evidement il est convertit à la volé en tant que fonction.

J'avoue qu'à la lecture de ceci j'ai cru à une erreur, mais j'ai quand même vérifié, peut-être étais-ce un type de déclaration d'évenement que je ne connaissais pas.

Et donc non, après test, si tu fais monLi.onclick = "mafonction(param1, param2)" il n'est pas convertit en fonction, tu a simplement un string à la place de ton évenement, et donc le clic ne produit aucun effet, forcément.

Alors "ca marche" dans le sens ou oui, l'attribut onclick est bien défini comme on l'a demandé, c'est à dire en chaine de caractère (même si c'est pas ça qu'on voulait à priori), mais non, la chaine n'est pas évaluée et convertit en fonction. Ou alors j'ai raté une étape Smiley sweatdrop
Tymlis a écrit :
Hmmm


J'avoue qu'à la lecture de ceci j'ai cru à une erreur, mais j'ai quand même vérifié, peut-être étais-ce un type de déclaration d'évenement que je ne connaissais pas.

Et donc non, après test, si tu fais monLi.onclick = "mafonction(param1, param2)" il n'est pas convertit en fonction, tu a simplement un string à la place de ton évenement, et donc le clic ne produit aucun effet, forcément.

Alors "ca marche" dans le sens ou oui, l'attribut onclick est bien défini comme on l'a demandé, c'est à dire en chaine de caractère (même si c'est pas ça qu'on voulait à priori), mais non, la chaine n'est pas évaluée et convertit en fonction. Ou alors j'ai raté une étape Smiley sweatdrop


Ah oui j'ai dit de la merde.
il ne faut pas confondre :
elm.onclick = "pouet(blabla)" et elm.setAttribute("onclick", "pouet(blabla)")

Dans le premier on inscrit onclick que en tant qu'attribut du DOM
et dans le second on inscrit onclick en tant que pure attribut HTML
pour le vérifier c'est simple, il suffit de voir comment il se comporte avec firebug. Dans la partie HTML tu vois le onclick déclaré si tu l'as passé via un setAttribute.
Mais bon c'est crade et moche, donc à ne pas utiliser.
Accessoirement cela peut etre utile si on fait des cloneNode, cela permet de garder l'evenement, mais pas en tant qu'event Smiley sweatdrop