2009-11-26 9 views
0

J'essaie d'attribuer un numéro différent à différentes fonctions de rappel dans jquery.Question de rappel JQuery

for (i=o;i<types.length;i++) { 
    $('#ajax'+types[i]+'Div').html('Loading...').load('searchAjax.php','new=u',function() { $(this).find('select').change(function() { AjaxDiv(i); }) }); 
} 

Chaque fois que je lance cette section de code, i est de 5 pour chaque appel à ajaxDiv parce qu'il appelle une variable globale. Je ne suis pas sûr si je peux changer la portée de i ou s'il y a un moyen d'imprimer la valeur dans la fonction de changement. Des idées?

Merci d'avance! Joyeux Action de Graces!

Andrew

+0

Voir http://stackoverflow.com/questions/1451009/javascript-infamous-loop-problem et http://stackoverflow.com/ questions/341723/event-handlers-inside-a-javascript-loop-need-a-closure et environ 80 autres questions. (Indice: vous avez besoin d'une fermeture) –

+0

Alors que les autres ont certainement répondu à la question, un autre problème pourrait être que vous avez mis i égal à la lettre o ... – Gausie

+0

@Gausie: o est le nouveau 0 –

Répondre

3

Les fonctions de rappel se réfèrent tous à la même variable i, et ils sont exécutés lorsque la boucle est terminée.

Vous avez à capturer la variable i sur la boucle:

for (i=o;i<types.length;i++) { 
    (function (i) { 
    $('#ajax'+types[i]+'Div').html('Loading...').load('searchAjax.php','new=u', 
    function() { 
     $(this).find('select').change(function() { AjaxDiv(i); }) 
    }); 
    })(i); 
} 
+0

Combien de fois avez-vous vous avez expliqué cela sur SO? Nous en avons vraiment besoin dans la FAQ. –

+4

Oui, trop souvent, une FAQ par langue serait bien ... http://stackoverflow.com/questions/1734749/ http://stackoverflow.com/questions/643542/ http://stackoverflow.com/questions/1582634/ http://stackoverflow.com/questions/1331769/ http://stackoverflow.com/questions/1552941/ http://stackoverflow.com/questions/750486/ http: // stackoverflow .com/questions/933343/ http://stackoverflow.com/questions/1579978/ http://stackoverflow.com/questions/1413916/ – CMS

+1

Des conneries saintes. Ne supprime jamais ce commentaire. Il y a le point de référence ici. –