Есть ли аналогичный "onload" слушатель событий для новых элементов, добавляемых в DOM в Javascript? - PullRequest
2 голосов
/ 06 ноября 2019

Предоставляет ли Javascript прослушиватель событий, аналогичный onload, который будет вызываться, если элемент добавляется в DOM через innerHTML?

Я знаю <body onload="alert('hi');">...</body>. Но он работает только в начале, когда весь сайт загружен. Можно ли каким-то образом добавить элемент через innerHTML = ..., который мгновенно запускает прослушиватель событий, который он содержит?

Это должно выглядеть так иэто должен быть слушатель встроенного HTML, как этот:

elementxy.innerHTML = '<b onload="dosth()">....</b>'

1 Ответ

2 голосов
/ 06 ноября 2019

Это действительно плохой хак , но вы можете создать невидимый тег <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 он допускает выполнение произвольного кода.

Несмотря на это, лучше всего избегать встроенных обработчиков.

...