Bonjour,
js_html a écrit :
C'est ce que je fais d'habitude, mais là, j'étais sur téléphone alors...
... dans ce cas, tu s'abstiens.
C'est vraiment galère à corriger ensuite. La preuve, c'est qu'on en est à je ne sais pas combien de posts pour rattraper le coup, et en plus, tu n'as toujours pas compris comment ça marchait.
js_html a écrit :
JS n'est pas assez intelligent pour voir que td.onclick n'est pas une variable ?
1) y et y() sont tous les deux possibles, mais signifient 2 choses différentes en js. Javascript ne peut pas deviner tes intentions.
2) "undefined" est une valeur possible pour td.onclick même si c'est une méthode. Et c'est justement ce que renvoie y() quand elle n'a pas d'instruction return.
3) y() pourrait renvoyer le code d'une fonction. Ça n'aurait pas trop de sens de faire comme ça ici, et c'est rare qu'on ait besoin de le faire, mais c'est possible syntaxiquement.
Il n'est même pas clair que javascript puisse émettre une erreur à l'exécution dans ce type de cas.
js_html a écrit :
(À propos du fait que la fonction a ou pas des paramètres) Mais ce n'était pas le cas ici...
En effet. Mais ça pouvait marcher quand même avec par exemple l'emploi de variables globales initialisées de manière appropriée.
js_html a écrit :
Mais pourtant, ça l'exécute la fonction, regarde ça par exemple, et la question était bien d'exécuter la fonction ("Lancer une fonction javascript [...]"), même si là ça ne fonctionne pas à cause du .onclick (C'est bien pour ça que ça ne fonctionne pas ?)
1) le code du jsfiddle que tu indiques en lien est du gros n'importe quoi. Après son exécution, X reçoit la valeur "undefined" car displayNone() ne renvoie rien. Ça m'étonnerait que ce soit un effet voulu. Si on fait abstraction de ça, oui, la fonction s'exécute car elle est dans une partie de la page où le navigateur est censé exécuter du javascript justement.
2) justement non, la question n'était pas d'exécuter la fonction au moment de son affectation à td.onclick, mais de la faire exécuter plus tard lors d'un clic. C'est complètement différent.
js_html a écrit :
Je ne comprends pas pourquoi
<a onclick="y()" id="lien"></a>
est différent de
document.getElementById("lien").onclick=y()
, mais bon... C'est parce que, pour le second, JS prends "document.getElementById("lien").onclick" pour une variable ??
1) Dans le 1er cas, y() est la valeur d'un attribut html et l'affectation se fait dans une partie de la page où c'est du code html, pas du code js, et donc ici le navigateur n'exécute pas immédiatement le js. C'est ainsi que fonctionne le html. Le "=" est du html.
2) Dans le 2e cas, y() est dans dans une partie de la page où le navigateur est en train d'exécuter du code js. La fonction s'exécute immédiatement. C'est ainsi que fonctionne js. Le "=" est du js.
Amicalement,