1 回答
TA贡献1839条经验 获得超15个赞
如果元素不存在于 DOM 中,则First ofdocument.querySelector方法将返回。null您不能调用addEventListenernull。它之所以起作用,jQuery是因为 jquery 构造了一个单独的对象(称为 jQuery 对象)。一个 jQuery 对象看起来有点像这样:
{
0: {...} // HTMLElement reference
length: 1
} // jQuery object
该对象公开了一个 jQuery API,它具有on事件处理方法(无论是否存在实际 DOM 元素都可用)。这是 jQuery 的优点(也是缺点)。
另一方面,查询选择器方法返回HTMLElement. 如果该元素不存在于 DOM 中,则null返回。
现在假设该元素将在一定时间后出现在 DOM 中,您可以做两件事:
等待元素出现在 DOM 中,一旦它可用,就添加一个监听器函数。
在 JavaScript 中使用live事件(事件委托)。
我将向您展示第二种方法:
setTimeout(() => {
document.querySelector('#container').innerHTML = `<button id="btn">Click</button>`;
}, 3000);
document.addEventListener('click', (e) => {
if (e.target.id === 'btn') {
alert('Click works!');
}
});
<div id="container">
A button will appear after 3 seconds. However, click event would still work.
</div>
如您所见,我正在使用e.target
它来检测我在文档中单击了哪个元素(我附加了侦听器的位置)。一旦条件匹配,它就会触发alert
. 这允许我们为最初不存在于 DOM 中的元素绑定事件。
添加回答
举报