簡體   English   中英

錯誤出現為“無法將屬性'innerHTML'設置為null”

[英]Error coming as “Cannot set property 'innerHTML' of null”

我正在從Javascript生成html表,並將其作為InnerHTML分配給div標簽,但它給出了錯誤:

“未捕獲的TypeError:無法將屬性'innerHTML'設置為null”

<html>
<body>
<div class="fieldlist-vertical-title" style="color:white;left:0px;display:none;" id="rosterlegend">Some text</div>
<script>
   function generateLegend()
       {
       var fullTable ='' fullTable='<Table><TR><Table><TR bgcolor=#FF5733><TD>MM</TD>
       <TD>01:00 to 21:30</TD></TR></Table></TR></Table>'
       document.getElementById('rosterlegend').innerHTML = fullTable
       }
   generateLegend();
</script>
</body>
</html>

錯誤:未被捕獲的TypeError:無法將屬性'innerHTML'設置為null

嘗試更改為類似的內容,因此我們確保HTML DOM首先完成加載。
使用ES6模板字符串而不是普通字符串!

 document.addEventListener('DOMContentLoaded', () => { generateLegend(); }); function generateLegend() { fullTable = `<Table> <TR> <Table> <TR bgcolor=#FF5733> <TD>MM</TD> <TD>01:00 to 21:30</TD> </TR> <TR bgcolor=#FFFFFF> <TD>EVVV</TD> <TD>09:00 to 05:30</TD> </TR> </Table> </TR> </Table>`; document.getElementById('rosterlegend').innerHTML = fullTable; } 
 <div id="rosterlegend"> <div> 

刪除HTML字符串中的新行和多余的空格。

您的其余代碼工作正常! 但是,這不是神的做法。 理想情況下,您必須等待窗口加載。

window.onload(){
  generateLegend();
}

 function generateLegend() { var fullTable = " <Table><TR><Table><TR bgcolor=#FF5733><TD>MM</TD><TD>01:00 to 21:30</TD></TR><TR bgcolor=#FFFFFF><TD>EVVV</TD><TD>09:00 to 05:30</TD></TR></Table></TR></Table>"; document.getElementById('rosterlegend').innerHTML = fullTable; } generateLegend(); 
 <div id="rosterlegend">Some text</div> 

您的問題是,您在加載DOM之前嘗試使用id為“ rosterlegend”訪問div。 這意味着當您的JavaScript嘗試訪問您的元素時,它就無法訪問。 解決此問題的一種方法是將loadDOMContentLoaded事件偵聽器添加到元素中,在HTML(如果使用load事件,包括圖像)和窗口加載后,該函數將觸發。 這樣,您的JavaScript就會知道您的HTML。

請參見下面的工作示例:

 function generateLegend() { var fullTable = " <Table><TR><Table><TR bgcolor=#FF5733><TD>MM</TD><TD>01:00 to 21:30</TD></TR><TR bgcolor=#FFFFFF><TD>EVVV</TD><TD>09:00 to 05:30</TD></TR></Table></TR></Table>"; document.getElementById('rosterlegend').innerHTML = fullTable; } window.addEventListener("load", generateLegend); // call your function when the window has loaded 
 <div id="rosterlegend"></div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM