1 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
如果元素不存在于 DOM 中,則First ofdocument.querySelector方法將返回。null您不能調(diào)用addEventListenernull。它之所以起作用,jQuery是因?yàn)?jquery 構(gòu)造了一個(gè)單獨(dú)的對(duì)象(稱(chēng)為 jQuery 對(duì)象)。一個(gè) jQuery 對(duì)象看起來(lái)有點(diǎn)像這樣:
{
0: {...} // HTMLElement reference
length: 1
} // jQuery object
該對(duì)象公開(kāi)了一個(gè) jQuery API,它具有on事件處理方法(無(wú)論是否存在實(shí)際 DOM 元素都可用)。這是 jQuery 的優(yōu)點(diǎn)(也是缺點(diǎn))。
另一方面,查詢(xún)選擇器方法返回HTMLElement. 如果該元素不存在于 DOM 中,則null返回。
現(xiàn)在假設(shè)該元素將在一定時(shí)間后出現(xiàn)在 DOM 中,您可以做兩件事:
等待元素出現(xiàn)在 DOM 中,一旦它可用,就添加一個(gè)監(jiān)聽(tīng)器函數(shù)。
在 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>
如您所見(jiàn),我正在使用e.target
它來(lái)檢測(cè)我在文檔中單擊了哪個(gè)元素(我附加了偵聽(tīng)器的位置)。一旦條件匹配,它就會(huì)觸發(fā)alert
. 這允許我們?yōu)樽畛醪淮嬖谟?DOM 中的元素綁定事件。
添加回答
舉報(bào)