Параметр
Цитирование MDN useCapture
влияет только на порядок, в котором событие распространяется вниз по дереву DOM.
Логическое значение, указывающее, будут ли события этого типа отправляться зарегистрированному слушателю перед отправкой в любой объект EventTarget под ним в дереве DOM.
Как только у вашего фрагмента будет только один прослушиватель событий, вы действительно не сможете заметить никакого наблюдаемого эффекта.
Однако, если вы добавите еще один, то есть
document.querySelector("#id-checkbox").addEventListener("click", function(event) {
document.getElementById("output-box").innerHTML += "Checkbox capture";
});
вы заметите, как меняется порядок выполнения в зависимости от опции захвата внешнего обработчика.
Если вы хотите, чтобы флажок был установлен, вы можете использовать его следующим образом.
document.querySelector("#id-checkbox").addEventListener("click", function(event) {
event.stopPropagation();
document.getElementById("output-box").innerHTML += "Checkbox capture";
});
Здесь stopPropagation
предотвращает появление событий. Таким образом, событие не будет обработано в дереве DOM и preventDefault
не будет вызвано.
Если вы хотите, чтобы выполнялся только верхний обработчик, вы можете использовать
document.querySelector("html").addEventListener("click", function(event) {
document.getElementById("output-box").innerHTML += "Sorry! <code>preventDefault()</code> won't let you check this!<br>";
event.stopPropagation();
event.preventDefault();
}, {
capture: true
});
Здесь комбинация capture: true
и stopPropagation
предотвращает захват события в дереве DOM.