Reprendre la bonne valeur dans une fonction anonyme

Reprendre la bonne valeur dans une fonction anonyme - HTML/CSS - Programmation

Marsh Posté le 11-12-2008 à 15:55:22    

Bonjour,
j'utilise Mootools,
voici la partie de mon code Javascript qui me pose problème :

Code :
  1. var self = this;
  2. for( var i = 0 ; i < this.itemList.length ; i++ )
  3. {
  4.   var aEl = new Element('a',{href:'#'});
  5.   aEl.addEvent('mouseenter',function () {
  6.     self.showItem(i);
  7.   })
  8.   aEl.set('text',i+1);
  9.   aEl.inject(this.linkLine);
  10. }


En fait, le i dans ma fonction anonyme correspond toujours à la valeur maximale qu'il atteint dans le for.
Donc la dernière. C'est certainement le comportement normal, cela-dit, je voudrais que ma fonction anonyme prenne la valeur de i au moment de son ajout pour l'événement.

 

Mais je ne vois pas bien comment faire...
Si vous avez une solution, n'hésitez pas! :jap:


Message édité par dwogsi le 11-12-2008 à 16:03:02

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 11-12-2008 à 15:55:22   

Reply

Marsh Posté le 11-12-2008 à 16:07:29    

closure closure closure :

Code :
  1. aEl.addEvent('mouseenter', function() {
  2.   var localI = i;
  3.   return function() {
  4.     self.showItem(localI);
  5. }
  6. }());

Reply

Marsh Posté le 11-12-2008 à 16:24:50    

Je note.
Merci, ça fonctionne à merveille. :jap:


Message édité par dwogsi le 11-12-2008 à 16:25:41

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 11-12-2008 à 16:29:54    

C'est super-utile ouais. Genre pour des setTimeout pour y refiler des variables

Reply

Marsh Posté le 11-12-2008 à 16:37:36    

FlorentG a écrit :

closure closure closure :

Code :
  1. aEl.addEvent('mouseenter', function() {
  2.   var localI = i;
  3.   return function() {
  4.     self.showItem(localI);
  5. }
  6. }());



Ou bien

Code :
  1. aEl.addEvent('mouseenter', function (i) {
  2.    return function () {
  3.        self.showItem(i);
  4.    }
  5. }(i));

Message cité 2 fois
Message édité par masklinn le 11-12-2008 à 16:38:42

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-12-2008 à 16:37:46    

FlorentG a écrit :

C'est super-utile ouais. Genre pour des setTimeout pour y refiler des variables


C'est pas faux, encore que sur ce point la j'ai pas eu de problème étant donné que mootools permet de faire l'équivalent avec en plus la possibilité de rappeler une méthode avec son objet correspondant.


Message édité par dwogsi le 11-12-2008 à 16:38:13

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 11-12-2008 à 16:39:37    

masklinn a écrit :

Ou bien

Code :
  1. aEl.addEvent('mouseenter', function (i) {
  2.    return function () {
  3.        self.showItem(i);
  4.    }
  5. }(i));



Ouais, ça a une meilleure gueule :jap:

Reply

Marsh Posté le 11-12-2008 à 17:33:07    

masklinn a écrit :


Ou bien

Code :
  1. aEl.addEvent('mouseenter', function (i) {
  2.    return function () {
  3.        self.showItem(i);
  4.    }
  5. }(i));



Plus clair en effet, et adopté du coup.
Merci :)


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed