2010-11-18 11 views
0

ich so meinen Code schreibe:Warum dies nicht funktionieren kann - Live-Update mit 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");}) 
} 

Das Problem sehr seltsam ist, wird nur das letzte Element, das hinzugefügt hat .hover() Callback-Setup, andere habe kein Hover Event Handler Setup.

Mache ich falsch? Ich kann das neu hinzugefügte Element nicht mit jQuery manipulieren?

Antwort

3

Ich bin mir ziemlich sicher, dass Sie über die häufigsten Javascript Problem sind Stolper je:

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

Dieses ‚10‘ Warnungen zehnmal. Dies liegt daran, dass die Variable x in alert(x) eine Live-Referenz ist, keine Kopie, so dass es alarmiert, was auch immer x ist, muss es warnen, nicht was x war, als das Timeout festgelegt wurde. Dies funktioniert wegen closures. Verwenden Sie eine andere anonyme Funktion, die eine neue Variable Umfang einführt, und einen anderen Verschluss zu lösen dieses:

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

Da Ihr Code wirklich nichts zeigen, dass ich eine wirkliche Antwort stützen könnte, ich hoffe, das hilft Ihnen das verstehen Konzept.

Verwandte Themen