Bonjour,
J'effectue un appel ajax qui me retourne en json un tableau d'objets. Pour chaque objet, je veux créer un élément clicable.
en version simplifiée (je vous ai enlevé les objets imbriqués et les attributs pour l'exemple), ça donne :
Je pensais que ce que j'avais écrit dans mon alert était une closure, qui aurait du me figer la valeur de i au moment de la création des objets, et non de l'execution de l'évenement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $.Ajax (...) .done(function(datas) { for(var i=0;i<datas.length;i++) monJQObj.append("<div />") .text(datas[i].name) .on("click", function(event) { alert(function(value){return value;}(i)); } ) });
Or, si j'exécute ce code, quelque soit l'élément sur lequel je click, il me m'affiche toujours la même valeur qui correspond au nombre d'élément. J'en déduit donc que ce que j'ai fait n'est pas une closure et qu'il m'affiche la valeur de i au moment du déclenchement de l'évenement, donc lorsque qu'il est sorti de la boucle depuis bien longtemps...
Je ne comprend donc pas... Comment aurais-je du m'y prendre pour créer une closure avec une fonction anonyme ?
En vous remerciant !
Partager