Метод jQuery on() не связывает события, подобные live().
Как описано в http://api.jquery.com/live/
:
Как и в jQuery 1.7, метод .live() устарел. Используйте .on() для присоединения обработчиков событий.
Right. Итак, вместо
$('.dynamicallyCreatedElement').live('click', function(){
console.log('click');
});
Я должен использовать:
$('.dynamicallyCreatedElement').on('click', function(){
console.log('click');
});
Однако он не связывает событие с элементами, созданными после вызова on()
. Так что это действительно лучший метод live()
?
Я что-то пропустил?
Ответы
Ответ 1
Использовать on
таким же образом, как live
, который использовался для работы, вам нужно использовать его как:
$(document).on("click", ".dynamicallyCreatedElement", function() {
console.log('click');
});
Итак, вы привязываете обработчик on
к самому document
(или, фактически, к элементу контейнера, где будут появляться новые wlements) - благодаря @devnull69 для пояснения), затем передайте ему событие тип и селектор.
Вы найдете несколько примеров на странице live
.
Ответ 2
$('#closestStaticParent').on('click', '.dynamicallyCreatedElement' function(){
console.log('click');
});
Ответ 3
Использовать в качестве делегата()
$('body').on('click', '.dynamicallyCreatedElement', function () {
});
РЕДАКТИРОВАТЬ: Только так, чтобы все это получилось, при использовании делегата() селектор является первым аргументом, а on on() - вторым.
Ответ 4
Я нашел необходимость использовать этот подход с помощью:
$('#container').on('click','.dynamicallyCreatedElement',function(){
console.log('click');
});