在 DOM 之后加载新元素后检测单击



我正在尝试创建一个简单的Chrome插件 - 但是我遇到了一个问题。

我正在尝试使用简单的getElementById检测对div 的单击-但是,由于api调用发生在加载DOM之后,JS无法"找到"任何div并给出错误并且在我单击元素后不执行任何操作。

加载来自 API 的数据后,如何检测点击?我在下面包含了我的一些代码:

谢谢

document.addEventListener('DOMContentLoaded', function () {
var checkPageButton = document.getElementById('checkPage');
checkPageButton.addEventListener('click', function () {
inputBox = document.getElementById("postcodeInput").value
console.log(inputBox)
let xml = new XMLHttpRequest();
xml.open('get', "https://api.getaddress.io/find/" + inputBox + "/?api-key=SECRET&expand=true", false);
xml.send(null);
var data = xml
var arr = xml.responseText
var data = JSON.parse(arr)
var postcode = data.postcode
var addresses = data.addresses
console.log(addresses)
document.getElementById("postcode").innerHTML = postcode;
var text = "";
var i;
for (i = 0; i < addresses.length; i++) {
text += "<div id='addressClick' name=" + i + ">" + addresses[i].line_1 + "</div>" + "<br>";
}
document.getElementById("data").innerHTML = text;
clickFunc()
}, false);
}, false);
function clickFunc() {
var rowBox = document.getElementById("addressClick");
rowBox.addEventListener('click', function () {
console.log('asd');
}, true);
}

.HTML

<!doctype html>
<html>
<head>
<title>Address Search</title>
<script src="popup.js"></script>
</head>
<body>
<h3>Address Search</h3>
<input type="text" id='postcodeInput' name="postcodeInput" value="KW1 4YT">
<button id="checkPage">Search</button>
<div class='results'>
<h3>Results - <span id='postcode'></span></h3>
<p id='data'></p>
</div>
</body>
</html>
<style>
body {
width: 200px
}
#addressClick:hover {
color: blue;
cursor: pointer
}
</style>

您可以将EventListener附加到所有主体,并在每次单击时检测单击的元素是否是所需的元素:

document.body.addEventListener('click', event => window.alert(event.target.innerText)); 

这听起来像是一个激进的解决方案,但它比MutationObserver侵入性要小得多