Что указывает третий параметр (false) в документе document.addEventListener( "deviceready", OnDeviceReady, false);
Что указывает третий параметр (false) в
document.addEventListener("deviceready",OnDeviceReady,false);
Можно ли показать пример script, чтобы показать разницу
Ответы
Ответ 1
Это useCapture:
Если true
, useCapture
указывает, что пользователь желает инициировать захват. После запуска захват, все события указанного тип будет отправлен на зарегистрирован listener
, прежде чем отправлен на любой EventTarget
ниже это в дереве DOM. События, которые пузырь вверх по дереву будет не запускать слушателя, назначенного для использовать захват. См. События DOM уровня 3для подробного объяснения.
Ответ 2
Это по историческим причинам. Когда система событий браузера была впервые разработана, существовали два противоречивых способа моделирования того, как она работает. Они назывались захватом событий и пузырьками событий.
Возьмем, к примеру, этот HTML:
<html>
<body>
<a href="#">Content</a>
</body>
</html>
Если событие (например, щелчок) происходит в элементе a
, должны ли знать элементы предка? Широко признавалось, что они должны. Но вопрос в том, в каком порядке их следует уведомлять. Разработчики Microsoft и Netscape (это должно дать вам представление о том, насколько исторически мы говорим!) Имели разные мнения.
Одна из моделей - это захват событий (защищаемый разработчиками Netscape). Сначала он уведомил элемент html
и проложил путь вниз по дереву:
Другая модель - событие пузыря (защищено разработчиками Microsoft). Сначала он уведомлял целевой элемент и прокладывал путь к дереву:
Возможный компромисс в том, что он должен делать оба.
-
html
(фаза захвата)
-
body
(фаза захвата)
-
a
(фаза захвата)
-
a
(фаза барботирования)
-
body
(фаза пузырьков)
-
html
(фаза барботирования)
Итак, событие пробивается вниз по дереву, а затем снова создает резервную копию.
Это длинный способ добраться до addEventListener
. addEventListener
прослушивает как фазу захвата, так и события фазы пузырьков. Третий параметр (называемый useCapture
в спецификации) позволяет программисту указать, какую фазу они хотят использовать.
В современных браузерах по умолчанию используется false
. Вероятно, вы никогда не столкнетесь с ситуацией, когда вы хотите использовать этап захвата, тем более, что Internet Explorer по-прежнему не поддерживает его. Но для старых браузеров нужно, чтобы false
был явным, поэтому он обычно предоставляется для обратной совместимости.