В настоящее время с jQuery, когда мне нужно что-то сделать, когда происходит щелчок, я сделаю это так ...
$(".close-box").click( function() {
MoneyBox.closeBox();
return false;
});
Я смотрел какой-то код, который есть у кого-то еще в проекте, и они делают это так ...
$(".close-box").live("click", function () {
MoneyBox.closeBox();
return false;
});
Обратите внимание, что, насколько я могу судить, он делает то же самое, за исключением того, что они используют функцию live (), которая теперь устарела, и документы jQuery говорят, что on()
вместо этого нужно использовать, но в любом случае зачем использовать live / on () вместо моего первого примера?
javascript
jquery
ДжейсонДэвис
источник
источник
on
чтобы ,click
потомуclick
как звуки имени функции , как глагол, действие, когда то , что он делает это не щелкнуть элемент (например , вы можете также сделать с одной и той жеclick
функции)Ответы:
Поскольку у вас могут быть динамически сгенерированные элементы (например, поступающие из вызова AJAX), вам может потребоваться тот же обработчик кликов, который ранее был привязан к тому же селектору элемента, затем вы «делегируете» событие клика, используя
on()
аргумент селектора.Демонстрировать:
http://jsfiddle.net/AJRw3/
on()
также может быть синонимом,click()
если у вас не указан селектор:$('.elementClass').click(function() { // code });
является синонимом
$('.elementClass').on('click', function() { // code });
В том смысле, что он только один раз добавляет обработчик ко всем элементам с классом
elementClass
.elementClass
Например$('<div class="elementClass" />')
, если у вас есть новый элемент, обработчик не будет привязан к этому новому элементу, вам необходимо сделать:$('#container').on('click', '.elementClass', function() { // code });
Предполагая, что
#container
это.elementClass
предокисточник
Есть много ответов, каждый касается нескольких моментов - надеюсь, это может дать вам ваш ответ с хорошим объяснением того, что, что и как его использовать.
Использование
click()
- это псевдонимbind('click' ...)
. Использованиеbind()
принимает DOM в том виде, в котором он есть, когда настраивается прослушиватель событий, и связывает функцию с каждым из соответствующих элементов в DOM. То есть, если вы используете,$('a').click(...)
вы привяжете функцию, предоставленную к событию щелчка каждого тега привязки в DOM, обнаруженного при запуске этого кода.В
live()
jQuery использовали старый способ; он использовался для привязки событий точно такbind()
же, как это делает, но он не просто привязывает их к элементам в DOM при запуске кода - он также прослушивает изменения в DOM и также будет связывать события с любыми элементами, соответствующими будущему. Это полезно, если вы выполняете манипуляции с DOM и вам нужно, чтобы событие существовало для некоторых элементов, которые могут быть удалены / обновлены / добавлены в DOM позже, но не существуют при первой загрузке DOM.Причина, по
live()
которой сейчас обесценивается, заключается в том, что она была плохо реализована. Чтобы использоватьlive()
, вам нужно было изначально выбрать хотя бы один элемент в DOM (я считаю). Это также привело к тому, что копия функции будет привязана к каждому элементу, а если у вас есть 1000 элементов, это будет много скопированных функций.Создание
on()
функции должно было преодолеть эти проблемы. Он позволяет вам привязать один прослушиватель событий к объекту, который не будет изменяться в DOM (поэтому вы не можете использовать егоon()
для элемента, который будет удален / добавлен в DOM позже - привязать его к родительскому объекту) и просто применить элемент «фильтр», так что функция запускается только тогда, когда она поднимается до элемента, который соответствует селектору. Это означает, что у вас есть только одна функция (а не куча копий), привязанная к одному элементу - гораздо лучший подход к добавлению «живых» событий в DOM.... и в этом заключаются различия, и почему каждая функция существует и почему
live()
амортизируется.источник
$("a").live()
-> Он будет применяться ко всем<a>
, даже если он будет создан после этого вызова.$("a").click()
-> Это будет применяться ко всем только до того,<a>
как это будет вызвано. (Это сокращение отbind()
иon()
в 1.7)$("a").on()
-> Предоставляет все функции, необходимые для подключения обработчиков событий. (Новейший в jQuery 1.7)Цитаты :
источник
click()
- это ярлык для метода без делегированияon()
. Так:$(".close-box").click() === $(".close-box").on('click')
Чтобы делегировать события
on()
, т.е. в динамически создаваемых объектах вы можете:$(document).on('click', '.close-box') // Same as $('.close-box').live()
Но,
on()
представляет делегация в любом статическом элементе, а не только ,document
какlive()
делает, так что :$("#closestStaticElement").on('click', '.close-box')
источник
Вы должны прочитать разницу между
live
иbind
.Вкратце,
live
использует делегирование событий, позволяя выполнять привязку к элементам, существующим сейчас и в будущем.Напротив, обработчики, прикрепленные через
bind
(и его ярлыки, напримерclick
), прикрепляют обработчики непосредственно к элементам DOM, соответствующим селектору, и поэтому привязаны только к элементам, которые существуют сейчас.Следствием
live
гибкости является снижение производительности, поэтому используйте его только тогда, когда вам нужны предоставляемые им функциональные возможности.источник
$el.click(fn)
это ярлык для$el.on('click', fn)
См. Http://api.jquery.com/click/ и http://api.jquery.com/on/ для получения дополнительной информации.
источник
Когда вам нужно привязать некоторые обработчики событий,
dynamically added elements
вы должны использоватьlive
(устарело) илиon
заставить их работать. Просто$('element').click(...);
не будет работать ни с одним динамически добавляемым элементом в DOM.Подробнее о различиях между .bind (), .live () и .delegate () в jQuery .
источник
$ .click () - это просто ярлык для привязки или включения. Из документации jQuery:
источник
.on()
Метод придает обработчик событий к выбранному набору элементов в объекте JQuery.click()
Метод связывает обработчик события к «нажмите» событие JavaScript, или спусковой это событие на элементе.Проще говоря,
.click(...
если цель селектора меняется на лету (например, через какой-то ответ ajax), вам нужно будет снова назначить поведение.Это
.on(...
очень новый (jQuery 1.7), и он может охватывать живой сценарий с использованием делегированных событий, что в любом случае является более быстрым способом привязать поведение.источник
В
on
методе обработчик событий прикрепляется к родительскому элементу вместо целевого.пример:
$(document).on("click", ".className", function(){});
В приведенном выше примере обработчик события щелчка прикреплен к документу. И он использует всплытие событий, чтобы узнать, щелкнул ли кто-нибудь по целевому элементу.
источник