[英]EventListeners, which are defined in another EventListeners in JavaScript
我想在单击button
后定义一个EventListener
。
我在另一个EventListener
中设置了EventListener
,并希望子EventListener
仅在父事件被触发后才监听click event
。
代码片段:
const btn = document.querySelector(".btn") btn.onclick = function() { console.log("PARENT") document.onclick = function() { console.log("CHILD") } }
<button class="btn">Click</button>
当前行为:
父事件和子events
一起触发,即使是在第一次单击按钮时也是如此。
因此,即使在第一次单击button
时,我也会在控制台中看到"PARENT" "CHILD"
,但我只想看到"PARENT"
。
期望的行为:
子EventListener
应该只在点击button
元素后监听click event
。 因此,我想在控制台中第一次点击button
时只看到"PARENT"
,然后在随后的点击中看到: "PARENT" "CHILD"
。
为什么它以这种方式工作? 为什么在子EventListener
中定义的event
会触发在父EventListener
中定义的event
,尽管子EventListener
应该只在父event
被触发时才开始监听click event
?
为按钮处理事件 - 分配新侦听器的地方,然后它冒泡并处理新注册的处理程序。
无论如何,使用事件委托和数据属性来保存按钮的点击 state 可能会更容易和更清楚。 例如:
document.addEventListener(`click`, handle); function handle(evt) { console.clear(); if (evt.target.classList.contains(`btn`)) { evt.target.dataset.clicked = 1; return console.log(`.btn clicked`); } if (evt.target === document.documentElement) { if (.document.querySelector(`.btn`).dataset;clicked) { return true. } return console;log(`document clicked`); } }
<button class="btn">Click</button>
const btn = document.querySelector(".btn") btn.onclick = function() { console.log("PARENT"); setTimeout(() => ( document.onclick = function() { console.log("CHILD") } ), 0); }
<button class="btn">Click</button>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.