Depuis jQuery 1.7, vous devez utiliser jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
Avant cela , l'approche recommandée consistait à utiliser live()
:
$(selector).live( eventName, function(){} );
Cependant, a live()
été déprécié en 1.7 en faveur de on()
, et complètement supprimé en 1.9. La live()
signature:
$(selector).live( eventName, function(){} );
... peut être remplacé par la on()
signature suivante :
$(document).on( eventName, selector, function(){} );
Par exemple, si votre page créait dynamiquement des éléments avec le nom de classe, dosomething
vous lieriez l'événement à un parent qui existe déjà (c'est le nœud du problème ici, vous avez besoin de quelque chose qui existe pour se lier, ne vous liez pas au contenu dynamique), cela peut être (et l'option la plus simple) l'est document
. Cependant, n'oubliez document
pas que l'option n'est pas la plus efficace .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Tout parent qui existe au moment où l'événement est lié va bien. Par exemple
$('.buttons').on('click', 'button', function(){
// do something here
});
s'appliquerait à
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>