У меня огромное приложение jQuery, и я использую два нижеприведенных метода для событий щелчка.
Первый способ
HTML
<div id="myDiv">Some Content</div>
JQuery
$('#myDiv').click(function(){
//Some code
});
Второй метод
HTML
<div id="myDiv" onClick="divFunction()">Some Content</div>
Вызов функции JavaScript
function divFunction(){
//Some code
}
Я использую первый или второй метод в моем приложении. Какой лучше? Лучше для производительности? А стандарт?
javascript
jquery
html
jquery-events
Технарь
источник
источник
Ответы:
Используя
$('#myDiv').click(function(){
это лучше как следует стандартной регистрации событий модели. (JQuery внутренне используетaddEventListener
иattachEvent
).По сути, регистрация события современным способом - ненавязчивый способ обработки событий. Также для регистрации более одного прослушивателя событий для цели вы можете вызвать
addEventListener()
одну и ту же цель.http://jsfiddle.net/aj55x/1/
Подробнее о регистрации современных событий -> http://www.quirksmode.org/js/events_advanced.html
Другие методы, такие как установка атрибутов HTML , например:
Или свойства элемента DOM , например:
старые и их легко можно переписать.
Следует избегать использования атрибута HTML, поскольку он делает разметку больше и менее читаемой. Проблемы содержания / структуры и поведения плохо разделены, что затрудняет поиск ошибки.
Проблема с методом свойств элемента DOM заключается в том, что к одному событию может быть привязан только один обработчик события.
Подробнее о традиционной обработке событий -> http://www.quirksmode.org/js/events_tradmod.html
Ссылка на MDN: https://developer.mozilla.org/en-US/docs/DOM/event
источник
$('#myDiv').click(function(){
сначала запускаете код, затем динамически генерируете 20 строк HTML-кода из JavaScript, и у каждой строки есть кнопка, для которой при нажатии требуется JavaScript для выполнения той же функции. Если вы сделаете это сначала, то он не будет работать, так как обработчик событий был добавлен до того, как был сгенерирован HTML. Казалось бы, проще просто добавитьonclick="functionName()"
динамически генерируемый HTML, тогда кнопка работает сразу. Или вы знаете более элегантное решение для этой ситуации?.delegate()
функцию. Он прикрепит событие к любому элементу, который появится в будущем на сайте..live
устарела. Используйте.delegate
для более старых версий или.on
для более новых версий jQuery.Для повышения производительности используйте собственный JavaScript. Для более быстрой разработки используйте jQuery. Проверьте сравнение производительности в jQuery против производительности родного элемента .
Я провел тест в Firefox 16.0 32-разрядный на Windows Server 2008 R2 / 7 64-разрядный
Для событий щелчка, проверьте события Native Browser против триггера jquery или jQuery против привязки события Native Click .
Тестирование в Chrome 22.0.1229.79 32-разрядная версия на Windows Server 2008 R2 / 7 64-разрядная версия
источник
Насколько я понимаю, ваш вопрос не совсем о том, использовать ли JQuery или нет. Скорее: лучше связывать события встроенными в HTML или через прослушиватели событий?
Встроенная привязка устарела. Более того, таким образом вы можете привязать только одну функцию к определенному событию.
Поэтому я рекомендую использовать прослушиватели событий. Таким образом, вы сможете привязать множество функций к одному событию и отменить их при необходимости позже. Рассмотрим этот чистый код JavaScript:
Это работает в большинстве современных браузеров.
Однако, если вы уже включили jQuery в свой проект - просто используйте jQuery:
.on
или.click
функцию.источник
handler1
выдает ошибкуhandler2
иhandler3
никогда не будет вызван. Кроме того, вы не можете динамически добавлять и удалять определенные функции из слушателя. И последнее , но не в последнюю очередь,handler1
,handler2
иhandler3
должны быть объявлены в глобальном масштабе , который является запах.try..catch
внутри функций не будет работать, еслиhandler2
не определено. Встроенный JavaScript, очевидно, не работает, когда JS отключен в браузере пользователя, пожалуйста, не вводите в заблуждение других.Вы можете объединить их, используя jQuery, чтобы привязать функцию к клику
источник
$('#myDiv').click
лучше, потому что он отделяет код JavaScript от HTML . Нужно стараться, чтобы поведение и структура страницы были разными . Это очень помогает.источник
Пойдите для этого, поскольку это даст вам и стандарт и производительность.
В качестве второго метода используется простой код JavaScript, который работает быстрее, чем jQuery. Но здесь производительность будет примерно одинаковой.
источник
ИМХО, onclick является предпочтительным методом по сравнению с .click только при соблюдении следующих условий:
Я сформировал это мнение из-за того, что движки JavaScript на мобильных устройствах в 4-7 раз медленнее, чем их настольные аналоги, которые были созданы в том же поколении. Я ненавижу это, когда я захожу на сайт на моем мобильном устройстве и получаю нервную прокрутку, потому что jQuery связывает все события за счет моего пользовательского опыта и времени автономной работы. Еще один недавний фактор поддержки, хотя это должно касаться только правительственных учреждений;), у нас появилось всплывающее окно IE7 с сообщением о том, что процесс JavaScript занимает много времени ... ждать или отменить процесс. Это происходило каждый раз, когда нужно было связать множество элементов с помощью jQuery.
источник
Разница в работах. Если вы используете click (), вы можете добавить несколько функций, но если вы используете атрибут, будет выполнена только одна функция - последняя.
DEMO
HTML
JavaScript
Если мы говорим о производительности, то в любом случае непосредственное использование всегда быстрее, но с использованием атрибута, вы сможете назначить только одну функцию.
источник
Разделение проблем является ключевым здесь, и поэтому привязка событий является общепринятым методом. Это в основном то, что сказали многие из существующих ответов.
Однако не отбрасывайте идею декларативной разметки слишком быстро. У него есть свое место, и с такими рамками, как Angularjs, он является центральным.
Должно быть понимание того, что целое
<div id="myDiv" onClick="divFunction()">Some Content</div>
было настолько постыдным, потому что им злоупотребляли некоторые разработчики. Таким образом, он достиг точки кощунственных масштабов, очень похожеtables
. Некоторые разработчики на самом деле избегаютtables
табличных данных. Это прекрасный пример того, как люди действуют без понимания.Хотя мне нравится идея держать свое поведение отдельно от моих взглядов. Я не вижу проблем с разметкой, декларирующей, что она делает (не как она это делает, это поведение). Он может быть в форме фактического атрибута onClick или пользовательского атрибута, очень похожего на компоненты начальной загрузки javascript.
Таким образом, взглянув только на разметку, вы можете увидеть, что делает, вместо того, чтобы пытаться сторнировать подстановки событий поиска javascript.
Итак, в качестве третьей альтернативы вышеприведенному, использование атрибутов данных для декларативного объявления поведения в разметке. Поведение скрыто от глаз, но сразу видно, что происходит.
Пример начальной загрузки:
Источник: http://getbootstrap.com/javascript/#popovers
Примечание . Основным недостатком второго примера является загрязнение глобального пространства имен. Это можно обойти, используя третью альтернативу, описанную выше, или фреймворки, такие как Angular и их атрибуты ng-click с автоматической областью действия.
источник
Ни один из них не является лучшим в том, что они могут быть использованы для разных целей.
onClick
(должно быть на самом делеonclick
) работает немного лучше, но я очень сомневаюсь, что вы заметите разницу там.Стоит отметить, что они делают разные вещи:
.click
могут быть связаны с любой коллекцией jQuery, тогда какonclick
должны быть встроены в элементы, с которыми вы хотите, чтобы они были связаны. Вы также можете привязать только одно событие к использованиюonclick
, тогда как.click
вы можете продолжать связывать события.По моему мнению, я был бы последовательн в этом и просто использовал бы
.click
везде и держал весь мой код JavaScript вместе и отдельно от HTML.Не используйте
onclick
. Нет никаких причин использовать его, если вы не знаете, что делаете, и, вероятно, не знаете.источник
.click
не лучше, чемonclick
(«Никто не лучше »), подразумевалось, чтоonclick
это почти или столь же хороший способ написания кода, хотя на самом деле.click
это лучшая практика на милю. Извините, но ИМХО вам следует перефразировать ваш ответСобытия onclick, onmouseover, onmouseout и т. д. на самом деле плохо влияют на производительность (в основном в Internet Explorer , иди с цифрой). Если вы кодируете с помощью Visual Studio , когда вы запускаете страницу с ними, каждый из них создаст отдельный блок SCRIPT, занимающий память, и, следовательно, замедляющий производительность.
Не говоря уже о том, что у вас должно быть разделение интересов : JavaScript и макеты должны быть разделены!
Для любого из этих событий всегда лучше создавать evenHandlers, одно событие может захватывать сотни / тысячи элементов вместо создания тысяч отдельных блоков сценариев для каждого из них!
(Кроме того, все остальные говорят.)
источник
Ну, одна из основных идей jQuery - отделить JavaScript от неприятного HTML- кода. Первый способ - это путь.
источник
В большинстве случаев нативные методы JavaScript являются лучшим выбором по сравнению с jQuery, когда производительность является единственным критерием, но jQuery использует JavaScript и упрощает разработку. Вы можете использовать jQuery, так как он не сильно снижает производительность. В вашем конкретном случае разница в производительности игнорируется.
источник
Первый способ использования
onclick
- это не jQuery, а просто Javascript, так что вы не получаете накладных расходов на jQuery. Способ jQuery можно расширить с помощью селекторов, если вам нужно было добавить его к другим элементам, не добавляя обработчик событий для каждого элемента, но, поскольку он у вас есть сейчас, это просто вопрос, нужно ли вам использовать jQuery или нет.Лично, так как вы используете jQuery, я бы придерживался его, так как он согласован и отсоединяет разметку от скрипта.
источник
document.querySelector('#something').addEventListener(...
и в простом Javascript, или аналогичный, так что это не главное . Точно так же вы можете ловить всплывающие события от дочерних узлов в Javascript, а не только с помощью ярлыков jQuery. Суть в том, что эти события должны быть в контроллере (файл определений поведения javascript), а не в представлении (разбросанном здесь и там в html, требующем глобальных переменных-функций или, что еще хуже, встроенного кода).Первый способ - это предпочтение. Он использует расширенную модель регистрации событий [s] , что означает, что вы можете прикрепить несколько обработчиков к одному элементу. Вы можете легко получить доступ к объекту события, и обработчик может находиться в области действия любой функции. Кроме того, он динамический, то есть он может быть вызван в любое время и особенно хорошо подходит для динамически генерируемых элементов. Неважно, используете ли вы jQuery, другую библиотеку или нативные методы напрямую.
Второй метод, использующий встроенные атрибуты, требует большого количества глобальных функций (что приводит к загрязнению пространства имен) и смешивает контент / структуру (HTML) с поведением (JavaScript). Не используйте это.
На ваш вопрос о производительности или стандартах трудно ответить. Два метода просто совершенно разные и делают разные вещи. Первый более могущественный, а второй презираемый (считается плохим стилем).
источник
Функция Onclick Jquery
$('#selector').click(function(){ //Your Functionality });
источник