2010-11-18 4 views
0

Je suis en train d'écrire mon code comme ceci:Pourquoi cela ne peut pas travailler - mise à jour via jquery

function updates_cb() 
{ 
    in a while loop to call append_message 
} 

function append_message(message) 
{ 
    append the html of message into the page 
    now I am using selector to add callback to newly added element 
    $(jmsg).hover(function(){console.log("hover");}) 
} 

Le problème est très étrange, seul le dernier élément ajouté a .hover() configuration de rappel, d'autres n'a pas de configuration de gestionnaire d'événements de survol.

Est-ce que je fais mal? Je ne peux pas manipuler l'élément nouvellement ajouté en utilisant jQuery?

Répondre

3

Je suis sûr que vous tomber sur le plus commun problème Javascript jamais:

for (var x = 0; x < 10; x++) { 
    setTimeout(function() { alert(x); }, 1000); 
} 

de 10 'dix fois alertes. C'est parce que la variable x dans alert(x) est une référence en direct, pas une copie, donc il va alerter ce que x est au moment où il doit alerter, pas ce que x était lorsque le délai d'attente a été défini. Cela fonctionne à cause de closures. Utilisez une autre fonction anonyme, qui introduit une nouvelle portée variable et une autre fermeture pour résoudre ce:

for (var x = 0; x < 10; x++) { 
    setTimeout((function (y) { 
     return function() { alert(y); } 
    })(x), 1000); 
} 

Étant donné que votre code ne montre pas vraiment tout ce que je pourrais fonder une vraie réponse, j'espère que cela vous aide à comprendre la concept.

Questions connexes