Począwszy od jQuery 1.7 powinieneś używać jQuery.fn.on:
$(staticAncestors).on(eventName, dynamicChild, function() {});
Wcześniej zalecanym podejściem było użycie live():
$(selector).live( eventName, function(){} );
Jednak live()było przestarzałe w 1,7 za on()i całkowicie usuwa 1,9. live()Podpis:
$(selector).live( eventName, function(){} );
... można zastąpić następującym on()podpisem:
$(document).on( eventName, selector, function(){} );
Na przykład, jeśli twoja strona dynamicznie tworzy elementy z nazwą klasy dosomething, powiążesz zdarzenie z rodzicem, który już istnieje (jest to sedno problemu tutaj, potrzebujesz czegoś, co istnieje, aby się z nim połączyć, nie łącz z zawartość dynamiczna), może to być (i najłatwiejsza opcja) document. Pamiętaj documentjednak, że może nie być najbardziej wydajną opcją .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Każdy rodzic, który istnieje w momencie powiązania zdarzenia, jest w porządku. Na przykład
$('.buttons').on('click', 'button', function(){
// do something here
});
dotyczyłby
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>