2 回答

TA貢獻1853條經(jīng)驗 獲得超18個贊
我相信正在發(fā)生的事情是,當您單擊一個選項并調(diào)用選項單擊偵聽器時,您正在經(jīng)歷update()并向updateParagraphs()容器添加一個新的單擊偵聽器。但與此同時,click 事件正在傳播到容器,并被您剛剛添加的新容器偵聽器捕獲。
所以你有兩個選擇:第一個,正如@wth193 所建議的,是使用 setTimeout() 在下一個滴答聲中添加容器監(jiān)聽器。
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條經(jīng)驗 獲得超4個贊
function updateParagraphs(){
...
// container.addEventListener('click', readyToUpdate, {once: true});
setTimeout(function () {
container.addEventListener('click', readyToUpdate, {once: true});
});
}
我認為打破調(diào)用堆棧的 setTimeout 似乎有效,但我無法解釋原因。
添加回答
舉報