代码之家  ›  专栏  ›  技术社区  ›  Frustrated programmer

element.addEventListener未添加侦听器

  •  0
  • Frustrated programmer  · 技术社区  · 8 年前

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

    开始时 函数acceptSuggestion()。{ console.log(`clicked`) console.log(this.textcontent); } //其他位置 suggestions.couldbe.innerhtml=`; 列表.建议.foreach(函数(项){ let button=document.createElement(`button`); button.textContent=项目; button.addEventListener(`click`,acceptSuggestion);//追加前 button.style=`文本对齐:居中;宽度:50%`; suggestions.couldbe.appendchild(按钮); button.addEventListener(`click`,acceptSuggestion);//追加后 suggestions.couldbe.innerhtml+=`<br>`; (});

    它创建按钮精细
    .
    但是点击它们什么也不做。

    这是为什么?我知道我有这方面的活动权利:https://www.w3schools.com/js/js_htmldom_eventliner.asp“rel=”nofollow noreferrer“>https://www.w3schools.com/js/js_htmldom_eventliner.asp

    如果这很重要,我将使用electric.js创建类似网页的应用程序,而不是浏览器。

    它创建按钮很好
    List
    但是点击它们什么也不做。

    这是为什么?我知道我有这个机会,因为: https://www.w3schools.com/js/js_htmldom_eventlistener.asp

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Nathanael    8 年前

    发生这种情况的原因是: suggestions.couldBe.innerHTML+="<br>";

    发生的是浏览器元素正在生成所有新的HTML每个循环,因为 += innerHTML .

    基本上是伪代码:

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

    这将导致通过 suggestions.couldBe.appendChild(button); 要转换为HTML,然后重新解析,以及在循环的每次迭代中从HTML创建的所有新元素。因为您的按钮事件处理程序是在JS中创建的;当它从HTML版本重新创建按钮时,它将丢失。

    您希望通过JS来完成这一切,而不是混合它。所以我的建议是改变这一行: suggestions.couldbe.innerhtml+=“<br>”;

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