Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обработчик кликов на body (https://javascript.ru/forum/misc/77170-obrabotchik-klikov-na-body.html)

alexmix 02.04.2019 12:28

Обработчик кликов на body
 
Подскажите, пожалуйста, насколько хорош или плох такой подход, принято ли так вообще делать.

На "document.body" вешаем обработчик кликов, который при всплытии клика делает так:
1. Вычисляет элемент, который кликнули.
2. У этого элемента считывает значение атрибута, например, "data-run" (значение атрибута = имя функции, которую надо вызвать).
3. Вызывает функцию-обработчик, если она существует.

HTML код элементов, которые по клику что-то делают, выглядит, например, так:
<div data-run="click">...</div>
...
<div data-run="popup">...</div>
...
<div data-run="dropdown">...</div>

рони 02.04.2019 13:04

Цитата:

Сообщение от alexmix
принято ли так вообще делать.

Делегирование событий

alexmix 02.04.2019 14:41

рони, благодарю. Конечно же читал :-)

Немного дополню вопрос - принято ли так делать вообще для всех click событий страницы (сайта)? Может это плохая практика? Или я не вижу (пока) каких-то недостатков в этом подходе?

Преимущества вижу следующие:
1. Не надо бегать по DOM'у и навешивать onclick'и. HTML загрузили - и сразу все работает.
2. Если вставили HTML в DOM javascript'ом - так же не надо вешать обработчик.
3. Если очень много элементов, на которых надо обрабатывать клики (например, несколько сотен/тысяч строк таблицы).

В итоге меньше кода (сокращаем лишние onclick, addEventListener) и меньше дорогостоящих манипуляций с DOM.

Alexandroppolus 02.04.2019 16:41

Реакт, например, так делает - все onClick в пропсах элементов на самом деле вызываются из обработчика, висящего на документе


Часовой пояс GMT +3, время: 13:20.