Станом на jQuery 1.7 слід використовувати jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
До цього рекомендованим підходом було використання live()
:
$(selector).live( eventName, function(){} );
Однак live()
був on()
знятий у 1,7 на користь та повністю вилучений у 1,9. live()
підпис:
$(selector).live( eventName, function(){} );
... може бути замінено таким on()
підписом:
$(document).on( eventName, selector, function(){} );
Наприклад, якщо ваша сторінка динамічно створювала елементи з назвою класу, dosomething
ви пов'язуєте подію з батьком, який вже існує (це суть проблеми, тут вам потрібно щось, що існує для прив’язки, не прив'язуйте до цього динамічний контент), це може бути (і найпростіший варіант) document
. Хоча мати на увазі, document
можливо, це не найефективніший варіант .
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
Будь-який батько, який існує на момент прив'язки події, є добре. Наприклад
$('.buttons').on('click', 'button', function(){
// do something here
});
застосовуватиметься до
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>