Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как отменить событие (https://javascript.ru/forum/misc/32720-kak-otmenit-sobytie.html)

dmitry111 27.10.2012 12:42

Как отменить событие
 
С точки зрения хорошего тона в js, можно ли событие ставить на весь документ?

document.onclick = function (event) {
    if (event.target == xxx) {
        // что-то выполнить
    }
    else if (event.target == yyy) {
        // что-то выполнить
    }
    else {
        //отменить
    }
};


Событие стоит на весь документ, как это отразится на производительности, если документ большой?
Как сделать лучше?

nerv_ 27.10.2012 12:59

Цитата:

Сообщение от dmitry111
можно ли событие ставить на весь документ?

можно
Цитата:

Сообщение от dmitry111
как это отразится на производительности, если документ большой?

подозреваю, что либо никак, либо не существенно (если капать глубже)
Цитата:

Сообщение от dmitry111
Как сделать лучше?

а что надо-то?

dmitry111 27.10.2012 14:56

Цитата:

Сообщение от nerv_
а что надо-то?

да просто спросить хотел)
планирую объединить все события на клик в одно. Мне кажется код приобретет более читаемый вид.

tenshi 27.10.2012 15:30

на клик ещё ладно, но не стоит делать так на mousemove)
а вот отменять события для всего документа - дурная практика

Gvozd 27.10.2012 15:52

Основная задача для которой вешают обработчик события на весь документ - когда нужно обработать событие на однотипных объектах, которые могут появлятся и исчезать.
Например клик по всем ссылкам, можно уложить в один обработчик, и любые свежедобавленные ссылки также будут выполнять этот код, без необходимости назначать им личный обработчик.
При этом глобальный обработчик естественно не отменяет событие
Так работает jQuery.live

С точки зрения производительности, навешивание общего обработчика отъест меньше памяти, и меньше времени займет навешивание самого события.
Обработка события при этом будет чуть дольше(если проверять тип целевого объекта)

melky 27.10.2012 18:03

Цитата:

Сообщение от dmitry111
С точки зрения хорошего тона в js, можно ли событие ставить на весь документ?

http://learn.javascript.ru/event-delegation

Цитата:

Сообщение от iMaxmaxmaximus
обычный у тебя тон, но я вешаю обработчики на window

Есть толк, только если использовать useCapture.

При использовании Bubbling лучше вешать на максимальную близость к элементам - общему родителю - <body>, например.


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