开发者问题收集

尝试将 onclick 放在由另一个按钮添加到 DOM 的按钮上,但出现错误 Uncaught TypeError,这是关于设置“onclick”

2022-06-15
573

这是我的 HTML 代码,很简单,只有一个带按钮的 div 块。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Button Problem</title>
    <style>

    </style>
</head>
<body>

    <div class="users">
        <button value ="0" id="button1">CLICK ME</button>
    </div>

    <script src="./script.js"></script>

</body>
</html>

这是我的 JavaScript 代码:

document.getElementById("button1").onclick = function () {
    let el = document.querySelector(".users");
    el.innerHTML += `<button id="button2">LEGIT BUTTON</button>`;
}

document.getElementById("button2").onclick = function(){
    console.log("button2 is working!!!");
}

所以在 HTML 代码中,如您所见,我在 div 块中有一个按钮。在 JavaScript 中,我将 onclick 放在该按钮上,单击该按钮后,新按钮会添加到 DOM 中。但我收到错误“未捕获 TypeError:无法设置 null 的属性(设置“onclick”) at”我希望第二个 onclick 等待第一个 onclick 发生以添加新按钮。我该怎么办?

3个回答

将此新的 button2 添加到 DOM 后,您应该调用 document.getElementById("button2").onclick

h37l3x
2022-06-15

根据该代码,您尝试在将 button2 添加到 dom 之前为其添加事件侦听器。请先尝试像这样移动它以确保它存在:

document.getElementById("button1").onclick = function () {
  let el = document.querySelector(".users");
  el.innerHTML += `<button id="button2">LEGIT BUTTON</button>`;
  // it will now exist and you can add a listener
  document.getElementById("button2").onclick = function(){
     console.log("button2 is working!!!");
  }
}
mcgraphix
2022-06-15

实际上创建 dom 元素并在创建之后直接向其添加监听器会更清楚:

document.getElementById("button1").addEventListener("click", function () {

    let el = document.querySelector(".users");
    
    // Create the element using the API
    let btn = document.createElement("button");

    // Add element details (you don't need the ID anymore
    // because we'll use the javascript DOM element directly)
    btn.setAttribute("id", "button2");
    btn.innerText = "LEGIT BUTTON";

    // Add event listener
    btn.addEventListener("click", function(){
        console.log("button2 is working!!!");
    });

    // Append the new button to the element
    el.appendChild(btn);
});

Drago96
2022-06-15