Подтвердить что ты не робот

Метод 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()?

Я что-то пропустил?

4b9b3361

Ответ 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');
});