Ab jQuery 1.7 sollten Sie jQuery.fn.on
mit dem gefüllten Selektorparameter:
$(staticAncestors).on(eventName, dynamicChild, function() {});
Erläuterung:
Dies wird als Ereignisdelegation bezeichnet und funktioniert wie folgt. Das Ereignis wird an ein statisches übergeordnetes Ereignis ( staticAncestors
) des Elements, das behandelt werden soll. Dieser jQuery-Handler wird jedes Mal ausgelöst, wenn das Ereignis auf diesem Element oder einem der nachgeordneten Elemente ausgelöst wird. Der Handler prüft dann, ob das Element, das das Ereignis ausgelöst hat, mit Ihrem Selektor ( dynamicChild
). Wenn es eine Übereinstimmung gibt, wird Ihre benutzerdefinierte Handler-Funktion ausgeführt.
Vor diesem Zeitpunkt wurde empfohlen, die folgende Methode zu verwenden live()
:
$(selector).live( eventName, function(){} );
Allerdings, live()
wurde in 1.7 zugunsten von on()
und in 1.9 vollständig entfernt. Die live()
Unterschrift:
$(selector).live( eventName, function(){} );
... kann durch Folgendes ersetzt werden on()
Unterschrift:
$(document).on( eventName, selector, function(){} );
Wenn Ihre Seite zum Beispiel dynamisch Elemente mit dem Klassennamen dosomething
würden Sie das Ereignis an ein bereits existierendes Elternteil (dies ist der Kern des Problems hier, Sie brauchen etwas, das existiert, um zu binden, binden Sie nicht an den dynamischen Inhalt), dies kann sein (und die einfachste Option) ist document
. Bedenken Sie jedoch, dass document
möglicherweise nicht die effizienteste Option ist .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Jedes Elternteil, das zum Zeitpunkt der Bindung des Ereignisses existiert, ist in Ordnung. Zum Beispiel
$('.buttons').on('click', 'button', function(){
// do something here
});
würde gelten für
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>