2010-10-29 8 views
0

Prenons un code pseudo-Mootools:«puis » l'état de la variable dans un événement Mootools même après var a changé

for loop (i) from 0 to 5 { 
    create.element { 
     id: 'element_'+i 
    } 
    $('element_'+i).addevent.click { 
     alert(i); 
    } 
} 

Les événements sont ajoutés aux éléments correctement. Cependant, lorsqu'on clique dessus, ils alertent tous le dernier itérateur ... ce qui serait 5.

Y at-il un moyen de changer "alert (i)" dans l'événement pour alerter l'itérateur à ce moment-là? ?

.toString n'a pas fait beaucoup.

Répondre

2

http://www.jsfiddle.net/dimitar/sbytJ/1/

for (var ii = 0; ii < 5; ++ii) { 
    new Element("div#id_" + ii + ".monkey[text=click me]").store("id", ii).addEvent("click", function() { 
     alert(this.retrieve("id") + " id: " + this.get("id")); 
    }).inject(document.body); 

} 

utilisant le stockage de l'élément (element.store("id", ii)/this.retrieve("id")) est un moyen d'assurer référence de valeur correcte lors de l'exécution ...

une autre manière par l'intermédiaire d'une fonction anonyme: http://www.jsfiddle.net/dimitar/sbytJ/2/

for (var ii = 0; ii < 5; ++ii) { 
    (function(id) { 
     new Element("div#id_" + id + ".monkey[text=click me]").addEvent("click", function() { 
      alert(id); 
     }).inject(document.body); 
    })(ii); 
} 

etc etc je suis sûr qu'il y a d'autres façons de refactoriser cela aussi

+0

Merci Dimitar - J'ai fini par aller avec la fonction anonyme - très bien travaillé! ... maintenant j'ai appris quelque chose de nouveau ... –