javascript - eventListeneres 没有响应或死于 DOM 操作
问题描述
简单地说,我正在创建一个网络应用程序,我正在向<section>
正文添加一个新的覆盖 + 警报按钮,并且在删除此部分时,其他 4 个侦听器往往会停止工作,它们不是“点击”而是“按键,按键”。
function listeners() {
reloadContent();
document.getElementById('input-pros').addEventListener('keypress', userSubmitData);
document.getElementById('input-cons').addEventListener('keypress', userSubmitData);
document.getElementById('input-pros').addEventListener('keydown', tabBetweenInputBoxes);
document.getElementById('input-cons').addEventListener('keydown', tabBetweenInputBoxes);
document.getElementsByClassName('fa-trash-restore-alt')[0].addEventListener('click', deleteAll);
document.addEventListener('click', closeEvents);
}
// This here is the function called on 'click' events
// The else if statement part was the problem. (Fixed now) please read on.
function closeEvents(event) {
let tempEvent = event.target;
if (tempEvent.classList.contains('fa-window-close')) {
removeFromLocalStorage(tempEvent.parentElement.innerText, tempEvent.parentElement.parentElement.id);
tempEvent.parentElement.remove(); // removes from UI
} else if (tempEvent.id === 'overlay' || tempEvent.classList.contains('btn-alert')) {
document.getElementById('overlay-space').innerHTML = '';
} else {
console.log(`Else`);
}
}
这些是我的侦听器,附加到我正在使用事件冒泡的文档的侦听器是最后一个。我相信这与我添加/删除<section>
. 现在我通过创建一个空<section>
并将该代码放入其中来解决问题,在删除时我只是清空了该部分。如果您查看下面的代码,您会看到我指向一个特定的#ID,它是 Body{} 中的空白部分,但在此之前(当它被窃听时)我只是将它添加到 body 中 ->document.body.innerHTML +=
这对我来说是有道理的,因为我正在添加一个部分,而我只是删除了该部分,其他任何东西都不应该受到影响。我能想到的唯一问题是一些 eventListeners 将附加到元素或该部分并且在删除时也会被丢弃,但由于我使用事件冒泡,这应该不是问题。对于事件冒泡,我尝试将其附加到两者,window.
并且document.
我知道它已修复我在这里对问题进行任何解释以及为什么会发生这种情况以便更好地理解,谢谢。
{
document.getElementById('overlay-space').innerHTML += `
<section id="overlay">
<div id="pop-up-alert">
<p>Sorry No Duplicates Allowed.</p>
<div>
<svg><rect></rect></svg>
<input type="button" value="OK" class="btn-alert" />
</div>
</div>
</section>
`;
}
解决方案
推荐阅读
- javascript - 当我选择开始日期和结束日期时,剑道日期范围弹出窗口没有关闭。(角度 9)
- flutter - 使用可重用的小部件我如何将状态传递给该小部件
- c# - 如何通过 asp.net core 获取当前计算机的域?
- python - 添加 MaxPooling 2D - ValueError:新数组的总大小必须保持不变
- elasticsearch - 我丢失了 kibana 数据,但其他弹性搜索索引数据很好
- python - 如何修复 Python 条形图中的图例颜色问题?
- python - 从对象数组中,打印仅包含一个对象属性的列表(Python)
- robotframework - 使用机器人框架重新运行测试套件并使用不同的登录信息进行骑行
- javascript - 为什么我的静态变量在分配后未定义?
- firebase - FirebaseAuthentication.net 在 Xamarin IOS 上挂起 UI