В конце дня каждое событие связано с некоторым элементом в DOM.В случае .bind
вы привязываетесь непосредственно к элементу (или элементам) в вашем объекте jQuery.Например, если ваш объект jQuery содержит 100 элементов, вы будете привязывать 100 прослушивателей событий.
В случае .live
, .delegate
и .on
, single прослушиватель событий связан, как правило, с одним из верхних узлов дерева DOM: document
, document.documentElement
(элемент <html>
) или document.body
.Поскольку события DOM всплывают через дерево, обработчик событий, прикрепленный к элементу body
, может фактически получать события щелчка, происходящие из любого элемента на странице.Таким образом, вместо привязки 100 событий можно связать только одно.
Для небольшого числа элементов (скажем, менее пяти) прямое связывание обработчиков событий, скорее всего, будет быстрее (хотя производительность вряд ли будетпроблема).Для большего количества элементов всегда используйте .on
.
Другое преимущество .on
заключается в том, что если вы добавляете элементы в DOM, вам не нужно беспокоиться о привязке обработчиков событий к этим новым элементам.,Возьмем, к примеру, список HTML:
<ul id="todo">
<li>buy milk</li>
<li>arrange haircut</li>
<li>pay credit card bill</li>
</ul>
Далее, несколько jQuery:
// Remove the todo item when clicked.
$('#todo').children().click(function () {
$(this).remove()
})
Теперь, что если мы добавим задачу?
$('#todo').append('<li>answer all the questions on SO</li>')
Нажатие на этот элемент todo не удалит его из списка, так как к нему не привязаны никакие обработчики событий.Если бы вместо этого мы использовали .on
, новый элемент работал бы без каких-либо дополнительных усилий с нашей стороны.Вот как будет выглядеть .on
версия:
$('#todo').on('click', 'li', function (event) {
$(event.target).remove()
})