2012-03-28 14 views
1

Ich ändere einige Methoden von $(selector).live('click', function(){}); zu $(selector).on('click', function(){});.on() Methode funktioniert nicht als live()

Zuerst scheint es genau gleich zu funktionieren. Aber wenn ich neues HTML in das DOM einfüge, werden die neuen Elemente, die mit demselben Selektor eingefügt wurden, nicht von $(selector).on('click', function(){}); abgefangen und bevor sie von der Methode live() abgefangen wurden.

warum? Ich vermisse etwas?

+0

Mögliche Duplikat http: // Stackoverflow .com/questions/8021436/jquery-1-7-wende-live-in-on –

+0

Doppel überprüfen Sie, was Sie verwenden ein Selektor. Sie können testen, indem Sie es in "Dokument" ändern. Wenn es mit "Dokument" funktioniert, ist der Selektor falsch. – Brad

+0

* "Ich vermisse etwas?" * Wahrscheinlich nur eine gute Lektüre der Dokumentation. –

Antwort

4

.on erfordert einen anderen Parametersatz als .live. Sie können nicht einfach einen durch den anderen ersetzen (und $(selector).on.live macht keinen Sinn) .

Die korrekte Syntax ist:

$(document).on('click', selector, function(){}); 

Diese auf alle Elemente binden, die selector egal übereinstimmen, wenn sie auf das DOM hinzugefügt werden.

Hinweis:

Statt document Sie einen Elternteil des Elements verwenden können (s), solange die Eltern in dem DOM bleiben.

Zum Beispiel:

<div id="myDiv"> 
    <p>Hello World</p> 
    <p>Hello World</p> 
</div> 

Dann können Sie tun:

$('#myDiv').on('click', 'p', function(){}); 

Das Click-Ereignis wird ausgelöst, für alle <p> Tags #myDiv hinzugefügt.

Hinweis:

$(selector).on('click', function(){}) 

ist die gleiche wie

tun
$(selector).bind('click', function(){}) 

(jQuery 1.7.1 schlägt vor, mit .on statt .bind)

+0

Es kann kontraproduktiv sein, es an ein Dokument anzuhängen, nein? Jedes Element, das sich nicht ändert, würde verhindern, dass das Ereignis an die Spitze sprudelt? Oder irre ich mich? – mddw

+0

@mdi: Sie können das Ereignis an jedes übergeordnete Element des gewünschten Elements anhängen, solange dieses übergeordnete Element im DOM verbleibt. Ich bin mir nicht sicher, wie Sprudeln mit delegierten Ereignissen funktioniert. –

+0

@mdi: Das Ereignis sprudelt bis zu den Elementen, die "on" aufgerufen wurden (was dann das delegierte Ereignis ausführt) und geht dann weiter bis zum "Dokument". http://jsfiddle.net/GdjPT/1/ –