html - element.addEventListener不添加监听器

标签 html node.js events electron addeventlistener

所以我有一个字符串数组,它将变成按钮,

//At start
function acceptSuggestion() {
    console.log(`clicked`)
    console.log(this.textContent);
}
//Else where
suggestions.couldBe.innerHTML = ``;
list.suggestions.forEach(function (item) {
    let button = document.createElement(`button`);
    button.textContent = item;
    button.addEventListener(`click`, acceptSuggestion);//before append
    button.style = `text-align:center; width:50%`;
    suggestions.couldBe.appendChild(button);
    button.addEventListener(`click`, acceptSuggestion);//after append
    suggestions.couldBe.innerHTML+=`<br>`;
});

它创建按钮很好
List
但是单击它们不会执行任何操作。

为什么是这样?我知道我对此有正确的事件权:https://www.w3schools.com/js/js_htmldom_eventlistener.asp

如果重要的话,我正在使用electron.js创建类似应用程序的网页,而不是浏览器。

最佳答案

发生这种情况的原因是由于以下这一行:suggestions.couldBe.innerHTML+="<br>";
发生的是,由于+=上的innerHTML,您的Browser元素正在每个循环生成所有新的新HTML。

基本上是伪代码:

var temp = suggestions.couldBe.innerHTML + "<br>;
suggestions.couldBe.innerHTML = temp;

这会使通过suggestions.couldBe.appendChild(button);添加的元素转换为html,然后重新解析,并在循环的每次迭代中使用HTML创建所有新元素。因为您的Button事件处理程序是在JS中创建的;从HTML版本重新创建按钮时,它会丢失。

您想全部通过JS来完成;不混合。所以我的建议是更改这一行:suggestions.couldBe.innerHTML+="<br>";

suggestions.couldBe.appendChild(document.createElement('br'));

关于html - element.addEventListener不添加监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51390134/

相关文章:

html - 我怎样才能在我的 <nav> 的 100% 中公平地分配我的 Bootstrap 菜单?

html - Css 导航菜单文本

javascript - 如何区分刷新或关闭窗口触发的卸载事件?

android - 如何检测手指是否已经在启动新 Activity 的按钮上

node.js - 使用shell.openItem()在asar文件中打开文件

C#知道设置了多少个EventHandlers吗?

jquery - 将 contenteditable span 的长度限制为 5 个数字字符

javascript - Tinymce 不保存或提交我的内容

javascript - 从键/值对创建复杂对象

Javascript 对象转换