2 回答

TA贡献1853条经验 获得超18个赞
我相信正在发生的事情是,当您单击一个选项并调用选项单击侦听器时,您正在经历update()并向updateParagraphs()容器添加一个新的单击侦听器。但与此同时,click 事件正在传播到容器,并被您刚刚添加的新容器侦听器捕获。
所以你有两个选择:第一个,正如@wth193 所建议的,是使用 setTimeout() 在下一个滴答声中添加容器监听器。
function updateParagraphs(){
// ...
// container.addEventListener('click', readyToUpdate, {once: true});
setTimeout(function () {
container.addEventListener('click', readyToUpdate, {once: true});
});
}
在我看来,一个更干净(更清晰)的解决方案是使用Event.stopPropagation()。
function choiceUpdater(e){
console.log("Enter choiceUpdater");
e.stopPropagation();
// ...
}
这样,click 事件仅由选择元素捕获,而不是由容器捕获。

TA贡献1810条经验 获得超4个赞
function updateParagraphs(){
...
// container.addEventListener('click', readyToUpdate, {once: true});
setTimeout(function () {
container.addEventListener('click', readyToUpdate, {once: true});
});
}
我认为打破调用堆栈的 setTimeout 似乎有效,但我无法解释原因。
添加回答
举报