2012-08-09 6 views
7

Ich versuche, eine Funktion auf einem Element (.this_button) auszuführen, das dynamisch geladen wird. Im mit dem folgenden Code:onLoad des neuen Elements, delegieren/an?

$(function(){ 
    $("body").on("load", ".this_button", function() { 
     console.log("its been loaded"); 
    }); 
}); 

Ich versuchte delegate, aber es sagt, seine für on veraltet. Einige Elemente werden möglicherweise gedrückt, nachdem das Dokument bereits 10 Minuten geladen wurde. Wie kann es kontinuierlich prüfen, ob ein Element .this_button in den Körper eingetreten ist?

Wer weiß, warum das nicht funktioniert?

+0

Wo wird es dynamisch hinzugefügt? Kannst du nicht einfach diese Funktion dort hinzufügen? –

+0

@rocky Nein, dieses Element kann kein Skript enthalten. Sein Laden von einer Datenbank und es würde die Dinge komplizieren –

+0

Ist '}):' wirklich, was Sie am Ende haben? Ich nehme an, dass sollte '});' –

Antwort

9

Vom documentation:

„In allen Browsern, die Last, scrollen und Fehlerereignisse (zB auf ein Element) nicht Blase [...] Solche Ereignisse sind nicht für die Verwendung mit Delegation unterstützt. Sie können jedoch verwendet werden, wenn der Ereignishandler direkt mit dem Element verbunden ist, das das Ereignis generiert. "

+3

Was löst die Schaltfläche aus, die der Seite hinzugefügt werden soll? Kannst du es an die gleiche Sache anhängen? –

11

Die Methode on behandelt Ereignisse für die aktuell ausgewählten Elemente bei der ersten Ausführung oder zukünftige Elemente, die ein bestimmtes Ereignis auslösen, die mit einem bestimmten Selektor übereinstimmen. Da ein Element, das einer Seite hinzugefügt wird, nicht automatisch einen load oder einen anderen Ereignistyp auslöst, wird Ihr Code niemals für Ihre neu hinzugefügten Elemente ausgeführt.

Sie haben zwei Möglichkeiten. Die erste besteht darin, ein benutzerdefiniertes Ereignis auszulösen, wenn das neue Element eingefügt wird. Zum Beispiel

$.get("/newElemnet", function(newElement) { 
    $('#placeToInsertElement').append(newElement); 
    $(newElement).trigger('newElementAdded'); 
}); 

Dann würde Ihre ursprüngliche Funktion für das benutzerdefinierte Ereignis hören:

$(function(){ 
    $("body").on("newElementAdded", ".this_button", function() { 
     console.log("its been loaded"); 
    }); 
}); 

Die zweite Option für die neuen Elemente ständig abfragen, ist, wie in diesen question beschrieben.