开发者问题收集

如何将事件挂在稍后出现在 DOM 中的元素上?

2019-11-04
326

我使用浏览器来与JS中的模块(需要)一起使用。但是,当我在JS文件中渲染一个元素并想在其上悬挂事件(ONCLICK)时,以下错误出现

未经定义的

如何将事件悬挂在稍后出现在DOM中的元素上?

2个回答

How to hang an event on an element that appears in the DOM later?

没办法。你应该改变应用程序的逻辑。你可以在父级上监听 onClick 事件。然后选择元素以选择你需要的新元素。

Roman Bush
2019-11-04

您可以使用 事件委托 来实现这一点。基本上,您向 document 添加一个事件侦听器。在处理程序方法中,您检查事件 target 是否有区别属性。如果 target 包含该属性,则执行某些操作,如果不包含,则什么也不会发生。这样,就可以处理稍后添加的元素。

// add a listener to document
document.addEventListener("click", showClick);

// ad a new element to the DOM
const newElement = document.createElement("div");
newElement.innerHTML = "I am new! Click me!";
newElement.id = "new";
newElement.style.cursor = "pointer";
document.body.appendChild(newElement);

// this handles all clicks
function showClick(evt) {
  // if it's div#new, do something
  if (evt.target.id === "new") {
    console.log("there we are!");
  }
  // otherwise nothing happens
}
<div id="notnew">I exist after page load. Try clicking me, I dare you!</div>
KooiInc
2019-11-04