1 回答

TA貢獻1790條經驗 獲得超9個贊
問題在于以下行:
message_container.innerHTML += msg;
我們使用 Handlebars 生成一個新的 HTML 字符串,并將其存儲到msg
變量中。然后我們想要將新的 HTML附加#message_container
到DOM 元素。
然而,它并不是message_container.innerHTML += msg
簡單地將我們的新 HTML 附加到,而是替換!的所有后代 DOM 節點。#message_container
#message_container
發生的情況的細分是:
我們獲取 DOM 中的后代節點
#message_container
,并將其字符串化為 HTML 字符串。msg
連接到這個新 HTML 字符串的末尾。新的 HTML字符串取代
innerHTML
了#message_container
.
這里重要的部分是替換。當innerHTML
of#message_container
被替換時,它的所有后代節點都被替換。<button>
因此,您之前附加偵聽器的所有sonclick
都已從 DOM 中刪除。
防止#message_container
每次添加 a 時替換所有子級的一種方法<button>
是使用Node.appendChild()
API。結果代碼如下所示:
// message_container.innerHTML += msg; // TODO: Replace this line with the below.
const node = document.createElement('div');
node.innerHTML = msg;
message_container.appendChild(node);
我創建了一個小提琴供參考。
- 1 回答
- 0 關注
- 209 瀏覽
添加回答
舉報