未捕获的TypeError:无法读取null错误的属性'innerHTML'

时间:2016-07-27 16:48:12

标签: javascript jquery web

我每隔1秒钟就会刷新一次时间。我尝试使用元素<div id="container"> <div id="kv_load" style="display:none" > <img class="mark" src="img/favicon.ico" id="test" ng-style="{'position': 'absolute','top': (x + 300) + 'px'}"> </div> </div> 中的文本为该显示添加前缀。但是,我不断收到错误“Uncaught TypeError:无法读取属性'innerHTML'的null”错误。但是,divMessage的文本在文档就绪函数divMessage中没有任何问题地分配。那么,这里发生了什么?

($function())

元素的定义如下。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
    var myVar = setInterval(myTimer, 1000);
    var loaded = false

    $(function(){
        ....
    $.post(window.location, {
        ....
    }).success(function(data){
        // I assign divMessage text here without any problems!
        loaded = true
    });

    function myTimer() 
    {
        var d = new Date()
        var dateTime = d.toLocaleTimeString()
        var divMessage = ''
        if (loaded) {
            // Uncaught TypeError: Cannot read property 'innerHTML' of null" error here!
            divMessage = document.getElementById("divMessage").innerHTML
            document.getElementById("div2").innerHTML = "<span style=\"color:green\">" + 
               divMessage + ", " + dateTime + "</span>"; 
        }
    }
</script>
</head> 

2 个答案:

答案 0 :(得分:1)

更正toLocaleTimeString的拼写错误并删除额外的})大括号

&#13;
&#13;
var myVar = setInterval(myTimer, 1000);
var loaded = false;

$(function() {
  loaded = true
});

function myTimer() {
  var d = new Date()
  var dateTime = d.toLocaleTimeString();
  var divMessage = ''
  if (loaded)
    divMessage = document.getElementById("divMessage").innerHTML
  document.getElementById("div2").innerHTML = "<span style=\"color:green\">" +
    divMessage + ", " + dateTime + "</span>";

}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="divMessage"><span style="color:yellow">some text</span>
</div>
<div id="div2"><span style="color:yellow">some text</span>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果页面加载时DOM中不存在divMessage,getElementById将返回null。

  

getElementById()不会搜索文档中的元素。在创建元素并为其分配ID时,必须先使用Node.insertBefore()或类似方法将元素插入到文档树中,然后才能使用getElementById()

访问它