Jquery on не работает, но live использует библиотеку 1.7.1

У меня есть кнопка, которая создается динамически, поэтому мне нужно использовать .live в моем коде. Вот пример:

$('#send').live('click', function(){
.....
..... code .....
.....
});

Я использую jQuery library 1.7.1, и я хотел изменить его на использование .on, но он не работает. Почему это? Является ли синтаксис другим?

Я посмотрел документацию, и, похоже, я ничего не делаю неправильно. Я не возражаю, оставляя это как живой, но я хотел бы знать, что я делаю что-то неправильно.

http://api.jquery.com/on/

Ответ 1

Разный синтаксис? Да. Вы прочитали всю страницу .on() doco, с которой вы связались?

Следующее резюме о том, как переключиться с .live() на .delegate() или .on(), находится на странице .live() doco:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

Итак, в вашем случае вы хотите:

$(document).on('click', '#send', function(){
   // your code here
});

Обратите внимание, что в идеале вы не будете использовать $(document), вы будете использовать $(someotherelement) для присоединения обработчика к элементу, ближе к вашему элементу #send. Если вы можете использовать любой элемент прямого родительского элемента "#send", или если родительский динамически создан, используйте его родительский элемент.

Ответ 2

Для использования делегирования событий .on требуется два селектора, например .delegate.

$('some container').on('click', '#send', function() { ... });