A partire da jQuery 1.7 dovresti usare jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
Prima di questo , l'approccio raccomandato era di usare live()
:
$(selector).live( eventName, function(){} );
Tuttavia, è live()
stato deprecato in 1,7 a favore di on()
e completamente rimosso in 1,9. La live()
firma:
$(selector).live( eventName, function(){} );
... può essere sostituito con la seguente on()
firma:
$(document).on( eventName, selector, function(){} );
Ad esempio, se la tua pagina creava in modo dinamico elementi con il nome della classe dosomething
, associ l'evento a un genitore già esistente (questo è il nocciolo del problema qui, hai bisogno di qualcosa che esiste a cui legarti, non associarti al contenuto dinamico), questa può essere (e l'opzione più semplice) è document
. Anche se tenere presente che document
potrebbe non essere l'opzione più efficiente .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Qualsiasi genitore esistente al momento in cui l'evento è associato va bene. Per esempio
$('.buttons').on('click', 'button', function(){
// do something here
});
si applicherebbe a
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>