Вопрос по click, jquery, bind, mouseclick-event, onclick – Каковы существенные различия между $ (sel) .bind («клик», $ (sel) .click (, $ (sel) .live («клик», $ (sel) .on («клик»)?

3

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

Итак, скажите мне:

What are the significant advantages/disadvantages among them, or is it just like ice cream, different flavors but same "feel-good" effect?

Всем рекомендуется высказать свое экспертное мнение по этому вопросу.

Спасибо заранее.

возможный дубликатjQuery: $().click(fn) vs. $().bind('click',fn); (где ответы также обсуждаютon) Thilo
Лучший ответ в документах для:bind(), click(), а такжеon(). VisioN
@VisioN Документы на самом деле слишком длинные, поэтому я разместил вопрос, чтобы получить точную, точную и четкую информацию от экспертов в этой области. Dexter Huinda
@Thilo Этот конкретный вопрос был задан в 2009 году. С тех пор многое произошло, поэтому просто для того, чтобы обновить техническую информацию о себе и других людях, я разместил немного такой же, но другой вопрос. Dexter Huinda

Ваш Ответ

2   ответа
1

Там нет никакой разницы в функциональности в этом конкретном случае. Тем не мение,.on предпочтительнее.bind с jQuery 1.7, а также для.click - это просто сокращение для общего обработчика событий.

почему .on предпочтительнее .bind? какая-либо значимая причина? Dexter Huinda
@DexterHuinda: Понятия не имею. Но я считаю, что выглядит лучше, лично =)
@minitech Действительно сейчас! : D Dexter Huinda
@DexterHuinda: Я предполагаю, что, поскольку это последний метод для привязки, добавляемый в библиотеку jQuery, он наиболее оптимизирован в настоящее время. Просто предположение, хотя.
4

bind() был добавлен в 1.0,live() в 1.3,delegate() в 1.4.2 иon() в 1.7.

По состоянию на 1.7on() является предпочтительным использованием иlive() устарела и не рекомендуется вообще. Если вы используете 1.3, используйтеbind() вместоlive() и с 1.4.2 использоватьdelegate() вместоlive() и с 1,7 использованияon() вместо любого из других.

относительно$("selector").click, Взято изclick() documentation:

In the first two variations, this method is a shortcut for .bind("click", handler), as well as for .on("click", handler) as of jQuery 1.7. In the third variation, when .click() is called without arguments, it is a shortcut for .trigger("click").

Why use on() instead of the others?
on() является последним дополнением, присоединившимся к библиотеке jQuery в версии 1.7.on() имеет несколько сигнатур методов, позволяющих получить те же результаты, что и предыдущая версия, но улучшенная и оптимизированная. Цитировать изdocumentation:

As of jQuery 1.7, the .on() method provides all functionality required for attaching event handlers.

Там нет необходимости использоватьbind() или жеdelegate() больше. Конечно, это будет работать и не должно быть никакого вреда при использовании этих методов, но я бы всегда предполагал, что последние добавления оптимизированы и улучшены по любому из недостатков предыдущих версий (если в документации не указано иное, как в случаеlive()).
Исходя из этого, я бы порекомендовал использоватьon() вместо.

Причинаlive() не рекомендуется использовать полную остановку, это больше связано с ее недостатками. Цитировать изlive() documentation.

Use of the .live() method is no longer recommended since later versions of jQuery offer better methods that do not have its drawbacks. In particular, the following issues arise with the use of .live():

jQuery attempts to retrieve the elements specified by the selector before calling the .live() method, which may be time-consuming on large documents. Chaining methods is not supported. For example, $("a").find(".offsite, .external").live( ... ); is not valid and does not work as expected. Since all .live() events are attached at the document element, events take the longest and slowest possible path before they are handled. On mobile iOS (iPhone, iPad and iPod Touch) the click event does not bubble to the document body for most elements and cannot be used with .live() without applying one of the following workarounds: Use natively clickable elements such as a or button, as both of these do bubble to document. Use .on() or .delegate() attached to an element below the level of document.body, since mobile iOS does bubble within the body. Apply the CSS style cursor:pointer to the element that needs to bubble clicks (or a parent including document.documentElement). Note however, this will disable copy\paste on the element and cause it to be highlighted when touched. Calling event.stopPropagation() in the event handler is ineffective in stopping event handlers attached lower in the document; the event has already propagated to document. The .live() method interacts with other event methods in ways that can be surprising, e.g., $(document).unbind("click") removes all click handlers attached by any call to .live()!

Хотя в документации гораздо больше вкусностей.

Additional Resources
click()
bind()
live() (don't use)
delegate()
on()

Теперь вы даете мне очень интересные идеи, спасибо. Dexter Huinda
Да, пожалуйста, обновите информацию по мере необходимости, еще раз спасибо. Dexter Huinda
Да, хорошо, я никогда не использовалlive() и одно только название сбивает с толку относительно того, какой конкретной цели оно действительно служит. Dexter Huinda
Я провел еще несколько исследований, и я не думаю, что я был совершенно прав, объясняя проблемы сlive(), Это больше связано с тем, как работает всплытие событий и какlive() делает это по умолчанию. Я получаю больше информации об этом и для полноты этого поста буду редактировать те, которые я получил все факты.
@DexterHuinda: Добро пожаловать. Из всех методов jQuery я нашел несколько вариантов связывания наиболее запутанными с самого начала. Но после того, как я сел и проверил, к какому выпуску они были добавлены, я просто начал всегда использовать последнюю версию.live() однако кажется странным, что мне всегда говорили никогда не использовать независимо от версии jQuery.

Похожие вопросы