Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Два обработчика одного и того же события (https://javascript.ru/forum/misc/50692-dva-obrabotchika-odnogo-i-togo-zhe-sobytiya.html)

levshkatov 07.10.2014 18:45

Два обработчика одного и того же события
 
Дилемма появилась одна. Есть функция, внутри которой необходимо повесить обработчик события: document.onclick. В этот обработчик происходит передача аргумента данной функции. Также необходимо данный обработчик поставить и снаружи функции, уже естественно без аргумента. Вопрос, что делать?

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

MallSerg 07.10.2014 19:09

Если нет тестового примера то советую обратится к ...

levshkatov 07.10.2014 19:17

Да, вы правы.
function test(arg){
	document.onclick = function(){
		alert(arg);
	}
}

test('Hello');

document.onclick = function(){
	alert('Bye');
}


Мне необходимо выполнение обоих обработчиков. Естественно, не в тестовом примере у обработчиков разный код (не два alertа).

bes 07.10.2014 19:43

объясни, когда это может понадобиться

tsigel 07.10.2014 19:43

<script>
function test(arg) {
  document.addEventListener("click", function () {
    alert(arg);
  });
}
test("hello");
document.addEventListener("click", function () {
  alert('Bye');
});
</script>

Так?

levshkatov 07.10.2014 20:05

tsigel,
Да, то что надо. Только вопрос, true или false писать не надо? Просто в документации указано это обязательным.
Upd. Не туда посмотрел. Этот параметр необязательный. Спасибо за помощь!
bes,
У меня есть много объектов, для которых написана единая функция. Обрабатывать событие надо как и для этих объектов в функции, так и для остального кода. Хочется чтобы все, что относится к данным объектам находилось внутри функции, а не разбросано по обработчикам.

tsigel 07.10.2014 20:14

levshkatov,
Отсутствие параметра - тоже самое почти что false. В данном примере я просто показал алгоритм, в своём коде я передаю false.

kostyanet 09.10.2014 08:39

true или false надо писать когда надо писать true или false.

capturing phase - щелчок валится на землю с дерева ломая ветки
bubbling phase - щелчок убился об землю и его душа воспарила

http://javascript.info/tutorial/bubbling-and-capturing

щелчком может быть что подобно щелчку

Когда вы хотите поймать событие в самом начале - то надо ставить true. Например на элементе который вообще ничего не должен пропускать через себя (в css есть подобный селектор). Когда все равно или когда вы хотите поймать событие на выходе из пике - то false. В этом случае объект события обогащается всем обычно присущим и полезным барахлом.

levshkatov 09.10.2014 13:02

Спасибо большое за подобное объяснение!


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