Официальный ответ jQuery 1.7: jQuery.on
.
Вы можете использовать jQuery.on
, чтобы подписаться на любое событие, и вы можете использовать jQuery.off
отменить подписку.
Чтобы прослушать все клики для элемента, соответствующего a.reply
, независимо от того, когда он был добавлен в документ, вы можете использовать следующий код:
$(document.body).on('click', 'a.reply', function() { /* ... */ });
Аналогично, вы можете использовать
$('body').on('click', 'a.reply', function() { /* ... */ });
По сути, $('body')
- это контекст , к которому добавляется прослушиватель событий.Таким образом, в действительности jQuery ожидает, пока любое событие не всплывет до элемента body
, и проверяет, является ли это событие событием click
.Если это так, а элемент, который создал событие click, соответствует селектору a.reply
, то jQuery запустит делегат, который вы передали в качестве третьего параметра.
Если мы только что сделали это:
$('a.reply').on('click', function() { /* ... */ });
Это будет работать так же, но только прослушивает события, сгенерированные элементами , изначально выбранными при выборе a.reply
.Поэтому любые новые элементы, добавленные в dom впоследствии, не будут включены.И поскольку мы не добавили селектор в метод on
, он не будет прослушивать дочерние события.
Редактировать
В предыдущих версиях jQuery,вы бы использовали jQuery.live
, который работает аналогичным образом, если не точно так же.В jQuery 1.7 jQuery.live
просто переносится jQuery.on
.