#javascript
#javascript
Вопрос:
Я добавляю событие по нажатию моей кнопки:
this.$refs.btn.addEventListener('click', this.turnOn);
В turnOn
методе я добавляю прослушиватель в документ, чтобы запустить turnOff
метод.
turnOn() {
document.addEventListener('click', this.turnOff);
}
Затем во время тестирования я нажимаю кнопку, и turnOn
запускается метод, но этот первоначальный щелчок также запускает прослушиватель щелчков по документу.
Как я могу запустить turnOn
метод, добавить прослушиватель документов, но не запускать прослушиватель щелчков по документу при первоначальном нажатии кнопки?
Комментарии:
1. вы добавляете 2
addEventListener
?2. 2 прослушивателя событий для 2 разных элементов.
3. не могли бы вы объяснить, что у вас есть и что вы хотите сделать
Ответ №1:
Это происходит из-за пузырящегося события.При нажатии на <button>
EventListener прикрепляется к телу, и после этого из-за пузырьков он вызывается.
Вы можете предотвратить это с помощью event.stopPropgation()
. Ниже приведены два фрагмента, чтобы увидеть разницу.
Нерабочий
document.querySelector('button').addEventListener('click',(e)=>{
document.addEventListener('click',()=>console.log("body clicked"));
console.log("button clicked")
})
<body>
<button>Test</button>
</body>
Примечание: Приведенный выше нерабочий пример также добавляет события множественного нажатия при каждом нажатии на Test
Работает
document.querySelector('button').addEventListener('click',(e)=>{
e.stopPropagation();
document.addEventListener('click',()=>console.log("body clicked"));
console.log("button clicked")
})
<body>
<button>Test</button>
</body>