|
5 / 5 / 3
Регистрация: 29.12.2010
Сообщений: 146
|
|||||||||||||||||||||
Правильное написание событий в jquery28.12.2016, 01:44. Показов 1514. Ответов 7
Метки нет (Все метки)
Добрый день!
Я всегда в своих скриптах, если нужно обработать клик, пишу такую конструкцию:
0
|
|||||||||||||||||||||
| 28.12.2016, 01:44 | |
|
Ответы с готовыми решениями:
7
Правильное написание Правильное написание ссылок Правильное написание компаратора |
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
|
|
| 28.12.2016, 02:24 | |
|
sly444, Правильно и так и так. Вообще в данном случае это не важно, сам пользуюсь частенько .click() Но, на сколько я знаю, некоторым это не нравится, когда используют методы .click() , .change() и т.п. и призывают придерживаться единообразию кода. Не важно какое событие вы навешиваете - метод и структура одна. Когда все-таки перед программистом встает вопрос, как же все-таки писать лучше и вы сомневаетесь. Я думаю нужно исходить из того, какой код будет считаться более грамотным и вызывать меньше претензий.
1
|
|
|
2463 / 1769 / 625
Регистрация: 11.07.2016
Сообщений: 4,067
|
||||||||||||||||
| 28.12.2016, 09:46 | ||||||||||||||||
|
sly444, самое главное отличие $.on() от $.click() в том, что $.click() создаёт множество обработчиков для каждого элемента, попадающего в выборку. Динамически добавленные элементы не будут иметь обработчик события, пока вы не вызовите функцию заново.
$.on() создаёт один обработчик для всех элементов выборки. Во-первых, это более оптимально в плане затрат памяти. Во-вторых, обработчик будет действовать для динамически добавленных элементов тоже. http://codepen.io/anon/pen/QGXzwv
3
|
||||||||||||||||
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
|
|
| 28.12.2016, 11:54 | |
|
Делегированная обработка событий имеет и обратную сторону медали — чем ближе будет прикреплен ловящий события обработчик (outer-элемент) к вершине дерева DOM, тем чаще он будет вызываться, поскольку он будет ловить события всплывшие от большего количества элементов. При каждом таком вызове он будет производить проверку, не является ли источник этого события нужным элементом. Таким образом, чем выше в иерархии документа будет установлен делегированный обработчик, тем больше это будет вызывать вычислительных затрат. Поэтому, стоит привязывать делегированные обработчики как можно ближе к интересующим элементам.
2
|
|
|
5 / 5 / 3
Регистрация: 29.12.2010
Сообщений: 146
|
||||||||
| 28.12.2016, 18:55 [ТС] | ||||||||
0
|
||||||||
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
|
||||||||||||||||
| 28.12.2016, 19:08 | ||||||||||||||||
Сообщение было отмечено sly444 как решение
Решение
sly444,
Eсли вешать обработчик на сами элементы, то разницы никакой нет
По поводу количества обработчиков и количества срабатываемых событий, это при делегировании событий, то о чем вы писали в своем посте
В такой конструкции, как я уже написал ранее, делегировать обработчик нужно ближайшему предку. Крайне не рекомендуется вешать событие на document или body, так как они будут обрабатываться при каждом клике пользователя, смотреть от какого элемента пришел клик, и сверять со всеми делегированными событиями.
2
|
||||||||||||||||
|
5 / 5 / 3
Регистрация: 29.12.2010
Сообщений: 146
|
|||||||||||
| 28.12.2016, 19:15 [ТС] | |||||||||||
|
sad67man, Отлично объяснили! Теперь все стало понятно. А скажите, пожалуйста, с точки зрения теории, почему при динамическом добавлении какого-либо элемента, обработчик
0
|
|||||||||||
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
|
||||||
| 28.12.2016, 19:41 | ||||||
|
sly444, Потому что когда вы вешаете событие click, такого элемента еще нет. И когда вы его динамически создадите, у него не будет никаких обработчиков.
А при такой конструкции
Добавлено через 6 минут sly444, Это и называется делегирование событий. Т.е. вы как бы передаете полномочия обрабатывать события другому элементу. Добавлено через 11 минут sly444, Но опять же на document нельзя вешать. Нужно вешать на ближайший предок элемента, как это возможно. Потому что у document-а большая вложенность, при каждом клике делегированное событие будет обрабатываться для всех элементов по иерархии от источника события. Соответственно, если вы вешаете несколько делегированных обработчиков, то они все так же будут обрабатываться.
2
|
||||||
| 28.12.2016, 19:41 | |
|
Помогаю со студенческими работами здесь
8
Правильное написание ссылок Правильное написание проекта
Правильное написание скобок
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|