对于Java中添加到DOM的新元素,是否有一个类似“ onload”的事件监听器?

问题描述 投票:1回答:2

Javascript是否提供类似于onload的事件侦听器,如果通过innerHTML将元素添加到DOM,则会调用该事件侦听器?

我知道<body onload="alert('hi');">...</body>。但是它仅在整个站点加载时才开始起作用。是否可以通过innerHTML = ...添加一个元素,该元素立即触发包含它的事件侦听器?

它应该看起来像这样,它必须是这样的内联HTML侦听器:

elementxy.innerHTML = '<b onload="dosth()">....</b>'
javascript events javascript-events listener innerhtml
2个回答
2
投票

这是一个非常糟糕的hack,但是您可以使用<img>属性和onerror创建不可见的src标签,从而导致错误:

const dosth = () => {
  console.log('dosth');
};

div.innerHTML = '<b>b content<img style="display: none;" onerror="this.remove(); dosth()" src="badsrc"></b>';
<div id="div"></div>

这是插入不可信HTML的一个好主意的原因-即使使用innerHTML,它也允许任意代码执行。

无论如何,最好完全避免内联处理程序。


0
投票

DOMSubtreeModified怎么样?https://developer.mozilla.org/en-US/docs/Archive/Events/DOMSubtreeModified

document.body.addEventListener('DOMSubtreeModified', function () {
  document.title = 'DOM Changed at ' + new Date();
}, false);

Mozilla警告说它可能会导致无限循环,可能会被阻止

它在Chrome中为我工作

© www.soinside.com 2019 - 2024. All rights reserved.