首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么事件侦听器不使用我动态创建的按钮呢?(Javascript)

为什么事件侦听器不使用我动态创建的按钮呢?(Javascript)
EN

Stack Overflow用户
提问于 2022-06-17 16:07:35
回答 1查看 60关注 0票数 0

我在向动态创建的按钮中添加“单击”事件侦听器时遇到一些问题。原始的、硬编码的html按钮不存在多次追加动态元素的问题,但是新元素中的动态按钮不会将事件侦听器传递给它们。当我点击它们时,什么都不会发生。

动态创建的按钮看起来确实有效,因为我可以将它们更改为提交按钮并重新加载页面,但仍然没有事件侦听器。

代码语言:javascript
复制
const title = document.querySelector(".tracker-title");
let btns = document.querySelectorAll(".add-btn");
btns.forEach(function (i) {
  i.addEventListener("click", function (e) {
    // e.preventDefault();
    count += 1;
    const element = document.createElement("div");
    element.classList.add("form-add-btn");
    element.classList.add("form-layout");
    const label = document.createElement("label");
    label.setAttribute("for", `${count}`);
    label.innerText = "Title";
    const input = document.createElement("input");
    input.setAttribute("placeholder", `ex. ${exampleArray[count - 3]}`);
    input.setAttribute("id", `${count}`);
    input.setAttribute("type", "text");
    const button = document.createElement("button");
    button.classList.add("add-btn");
    button.innerText = "Add";
    button.setAttribute("type", "button");

    title.appendChild(element);
    element.appendChild(label);
    element.appendChild(input);
    element.appendChild(button);

    btns = document.querySelectorAll(".add-btn");
  });
});

这是当我两次单击硬编码按钮时生成的html。

代码语言:javascript
复制
<div class="tracker-title">
  <div class="form-add-btn form-layout">
    <label for="3">Goal Title</label>
    <input type="text" placeholder="ex. Meditation" id="3">
    <button type="button" class="add-btn">ADD</button>
  </div>
  <div class="form-add-btn form-layout">
    <label for="4">Title</label>
    <input placeholder="ex. Exercise" id="4" type="text">
    <button class="add-btn" type="button">Add</button>
  </div>
  <div class="form-add-btn form-layout">
    <label for="5">Title</label>
    <input placeholder="ex. Studying" id="5" type="text">
    <button class="add-btn" type="button">Add</button>
  </div>
</div>
EN

回答 1

Stack Overflow用户

发布于 2022-06-17 16:32:32

动态按钮没有应用于它们的事件侦听器。循环在其执行时(在创建数组后一次)将事件侦听器添加到列表中的所有按钮中,动态创建的按钮此时不在数组中,因此无法应用事件侦听器。如果您希望对所有按钮都使用相同的事件侦听器,则可以将事件侦听器作为函数创建,并将其解析为addEventListener函数,该函数也必须在创建新按钮后调用。我的版本:

代码语言:javascript
复制
const title = document.querySelector(".tracker-title");
let btns = document.querySelectorAll(".add-btn");
//Event listener function
function eventlistener(e) {
   //e.preventDefault();
   count += 1;
   const element = document.createElement("div");
   element.classList.add("form-add-btn");
   element.classList.add("form-layout");
   const label = document.createElement("label");
   label.setAttribute("for", `${count}`);
   label.innerText = "Title";
   const input = document.createElement("input");
   input.setAttribute("placeholder", `ex.`);
   input.setAttribute("id", `${count}`);
   input.setAttribute("type", "text");
   const button = document.createElement("button");
   button.classList.add("add-btn");
   button.innerText = "Add";
   button.setAttribute("type", "button");
   //Add eventlistener function to the new button
   button.addEventListener("click", eventlistener);
   title.appendChild(element);
   element.appendChild(label);
   element.appendChild(input);
   element.appendChild(button);
   btns = document.querySelectorAll(".add-btn");
}
btns.forEach(function (i) {
    //Add eventlistener function to exeisting buttons
    i.addEventListener("click", eventlistener);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72662076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档