![](/img/trans.png)
[英]document.body.innerHTML = document.body.innerHTML kills the page?
[英]Trying to change an element's DOM's properties, but changes ignored after I use document.body.innerHTML +=. If order switched, things work fine
我很難說出該問題的標題,但找不到更簡潔的答案。
我想將事件oninput
附加到元素(此處是input
字段)。 但是由於某種原因,它沒有用。 我將問題縮小到示意圖MWE(最后是完整的MWE)。
addEvent();
document.body.innerHTML += "a";
addEvent()
只是一個函數,它更改了input
字段的oninput
屬性。 我的問題是addEvent()
被忽略了。
確保addEvent();
正常運行時,我還修改了input
字段的value
及其在函數正文中的backgroundColor
。 但是,當我運行代碼時, oninput
和value
修改,但是backgroundColor
已根據函數進行了修改。
如果我寫的話,對我來說更神秘
document.body.innerHTML += "a";
addEvent();
事情按預期進行。
我的問題分為兩個部分:
addEvent()
的代碼,因此無論我在前后編寫document.body.innerHTML += "a"
,結果都一樣嗎? backgroundColor
運行正常,而其余的似乎都被忽略了? 以下是我完整的MWE:
function addEvent() { var fieldScore = document.getElementById("foo"); fieldScore.style.backgroundColor = "rgb(0,255,0)"; fieldScore.value = "a"; fieldScore.oninput = function () { console.log("bar"); } } // document.body.innerHTML = buildForm(); addEvent(); document.body.innerHTML += "a";
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form><input type="text" value="" name="foo" id="foo"></form> <script type="text/javascript" src="mwe.js"></script> </body> </html>
預計:相同,但有a
在input
領域也是如此。
innerHTML +=
幾乎總是反模式。 它使瀏覽器執行此操作:
在此過程中,事件處理程序和有關被破壞元素的任何其他非HTML信息都會丟失。
如果需要附加到元素,請使用appendChild
或insertAdjacentHTML
。 例如:
document.body.appendChild(document.createTextNode("a"));
要么
document.body.insertAdjacentHTML("beforeend", "a");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.