Я нашел две замечательные статьи, рассказывающие о новой функции .on()
: jquery4u.com , elijahmanor.com .
Есть ли способ, где .bind()
все еще лучше использовать, чем .on()
?
Например, у меня есть пример кода, который выглядит следующим образом:
$("#container").click( function( e ) {} )
Вы можете заметить, что у меня есть только один элемент, извлеченный селектором, и в моем случае <div>
имя #container
уже существует, когда моя страница была загружена; не добавляется динамически. Важно отметить, что я использую последнюю версию jQuery: 1.7.2.
Для этого образца следует .on()
использовать вместо того, чтобы .bind()
даже если я не использую другие функции, предоставляемые .on()
функцией?
javascript
jquery
jquery-selectors
Самуил
источник
источник
.bind()
плохо для связывания нескольких элементов, но не упоминает, как.on()
при использовании в режиме связывания делает то же самое.Ответы:
Внутренне
.bind
сопоставляется непосредственно с.on
текущей версией jQuery. (То же самое относится и к.live
.) Таким образом, если вы используете.bind
вместо этого, это незначительное, но практически незначительное снижение производительности .Тем не менее,
.bind
могут быть удалены из будущих версий в любое время. Нет причин продолжать использовать,.bind
и есть все основания отдавать предпочтение.on
.источник
.bind
и.on
идентичны для неделегированных событий;.bind
не предоставляет какой-либо ярлык, как это$.getJSON
делаетВсе эти фрагменты выполняют одно и то же:
Тем не менее, они очень отличаются от этих, которые все выполняют одно и то же:
Второй набор обработчиков событий использует делегирование событий и будет работать для динамически добавляемых элементов. Обработчики событий, которые используют делегирование, также намного более производительны. Первый набор не будет работать для динамически добавляемых элементов и значительно ухудшит производительность.
on()
Функция jQuery не вводит никаких новых функциональных возможностей, которые еще не существовали, это просто попытка стандартизировать обработку событий в jQuery (вам больше не нужно выбирать между live, bind или делегатом).источник
$('selector').live('click', function () { ... });
поэтому вы держите результат как можно более идентичным.Прямые методы и
.delegate
превосходные API-интерфейсы,.on
и мы не собираемся их осуждаем.Прямые методы предпочтительнее, потому что ваш код будет менее строковым. Вы получите немедленную ошибку при неправильном вводе имени события вместо тихой ошибки. На мой взгляд, это также легче писать и читать,
click
чемon("click"
.delegate
Превосходит.on
из приказа аргумента:Вы сразу знаете, что это делегировано, потому что, ну, это говорит делегат. Вы также мгновенно видите селектор.
С
.on
этим не сразу понятно, делегирован ли он вообще, и вы должны посмотреть в конце для селектора:Теперь наименование
.bind
действительно ужасно и по номинальной стоимости хуже, чем.on
. Но.delegate
не может делать события без делегирования, и есть события, которые не имеют прямого метода, поэтому в таком редком случае его можно использовать, но только потому, что вы хотите сделать четкое разделение между делегированными и не делегированными событиями.источник
Если вы заглянете в исходный код,
$.fn.bind
вы обнаружите, что это просто функция перезаписи дляon
:http://james.padolsey.com/jquery/#v=1.7.2&fn=$.fn.bind
источник
Из документации по jQuery:
http://api.jquery.com/bind/
источник
Начиная с Jquery 3.0 и выше .bind устарел, и вместо этого они предпочитают использовать .on. Как @Blazemonger ответил ранее, что он может быть удален, и это точно, что он будет удален. Для более старых версий .bind также будет вызывать .on внутри, и между ними нет никакой разницы. Пожалуйста, смотрите API для более подробной информации.
Документация по jQuery API для .bind ()
источник