Ab jQuery 1.7 sollten Sie Folgendes verwenden jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
Zuvor war der empfohlene Ansatz live()
:
$(selector).live( eventName, function(){} );
Allerdings live()
wurde in 1.7 für veraltet on()
und vollständig in 1.9 entfernt. Die live()
Unterschrift:
$(selector).live( eventName, function(){} );
... kann durch folgende on()
Unterschrift ersetzt werden:
$(document).on( eventName, selector, function(){} );
Wenn Ihre Seite beispielsweise dynamisch Elemente mit dem Klassennamen erstellt dosomething
, binden Sie das Ereignis an ein übergeordnetes Element, das bereits vorhanden ist (dies ist der Kern des Problems hier. Sie benötigen etwas, an das gebunden werden kann, und binden Sie nicht an das dynamischer Inhalt), dies kann sein (und die einfachste Option) ist document
. Bedenken Sie jedoch, dass dies 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'
});
Alle Eltern, die zum Zeitpunkt der Ereignisbindung vorhanden sind, sind 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>