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 document
jednak, ż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>