js代码Uncaught TypeError: Cannot set properties of null (setting ‘innerHTML‘)问题解决

简介: js代码Uncaught TypeError: Cannot set properties of null (setting ‘innerHTML‘)问题解决

在编写一个html时,想要实现js中处理的数据输出并显示在浏览器的表格中,然后再写完代码后,报错Uncaught TypeError: Cannot set properties of null (setting 'innerHTML');

1.png

Cannot set properties of null (setting 'innerHTML'),这个报错的意思是无法读取null的属性“innerHTML”,即表示找不到你想要将所写的HTML代码插入的地方。


原因:浏览器加载HTML文档时,会将HTML文档解析为一个树形结构,称为DOM树,代码的执行顺序是自上而下依次执行,当执行到innerHTML这一行代码时,他并没有加载到下面的DOM结构,就会报错无法读取HTML。


解决办法:将DOM的读取部分的script放在body后面。或者在script标签中添加window.onload,等页面加载结束后再执行这一部分代码。


示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
    *{
      margin: 0;
      padding: 0;
    }
    div{
      font-size: 14px;
      width: 200px;
      height: auto;
      margin: 50px auto; 
    }
    table{
      text-align: center;
      border-collapse:collapse;
    }
    table,tr,td,th{
      border: 1px solid #ccc;
    }
    #t1 tr:nth-child(even){
      color:red;
    }
    th{
      font-weight: bold;
    }
  </style>
<!--   将这部分放在body之后解决问题  -->
<!--  <script type="text/javascript">
    var stuNum = 7;
    var stuSoc = new Array();
    var sum = 0;
    var std = 0;
    var notPassNum = 0;
    for (var i = 0; i < stuNum; i++) {
      stuSoc[i] = prompt("请输入7个学生中第"+(i+1)+"个学生成绩分数:");
      sum += parseInt(stuSoc[i]);
      if (stuSoc[i] < 60) {
        notPassNum++;
      }
    }
    std = parseFloat(sum/stuNum).toFixed(3);
    alert("总分:"+sum+","+"平均成绩:"+std+","+"不及格人数:"+notPassNum);
    for (var i = 0; i < stuNum; i++) {
      document.getElementById(i).innerHTML = stuSoc[i];
    }
    document.getElementById("sum").innerHTML = sum;   
    document.getElementById("std").innerHTML = std;
    document.getElementById("notPassNum").innerHTML = notPassNum;
  </script> -->
</head>
<body>
  <div id = "content">
    <table id = "t1">
      <tr>
        <th>序号</th>
        <th>分数</th>
      </tr>
      <tr>
        <td>1</td>
        <td id = "0"></td>
      </tr>
      <tr>
        <td>2</td>
        <td id = "1"></td>
      </tr>
      <tr>
        <td>3</td>
        <td id = "2"></td>
      </tr>
      <tr>
        <td>4</td>
        <td id = "3"></td>
      </tr>
      <tr>
        <td>5</td>
        <td id = "4"></td>
      </tr>
      <tr>
        <td>6</td>
        <td id = "5"></td>
      </tr>
      <tr>
        <td>7</td>
        <td id = "6"></td>
      </tr>
    </table>
  </div>
  <hr>
  <div id ="result" >
    <table id = "t2">
      <tr>
        <th>统计项</th>
        <th>数值</th>
      </tr>
      <tr>
        <td>总分</td>
        <td id = "sum"></td>
      </tr>
      <tr>
        <td>平均成绩</td>
        <td id = "std"></td>
      </tr>
      <tr>
        <td>不及格人数</td>
        <td id = "notPassNum"></td>
      </tr>
    </table>
  </div>
    <script type="text/javascript">
    var stuNum = 7;
    var stuSoc = new Array();
    var sum = 0;
    var std = 0;
    var notPassNum = 0;
    for (var i = 0; i < stuNum; i++) {
      stuSoc[i] = prompt("请输入7个学生中第"+(i+1)+"个学生成绩分数:");
      sum += parseInt(stuSoc[i]);
      if (stuSoc[i] < 60) {
        notPassNum++;
      }
    }
    std = parseFloat(sum/stuNum).toFixed(3);
    alert("总分:"+sum+","+"平均成绩:"+std+","+"不及格人数:"+notPassNum);
    for (var i = 0; i < stuNum; i++) {
      document.getElementById(i).innerHTML = stuSoc[i];
    }
    document.getElementById("sum").innerHTML = sum;   
    document.getElementById("std").innerHTML = std;
    document.getElementById("notPassNum").innerHTML = notPassNum;
  </script>
</body>
</html>


结果:

1.png

目录
相关文章
|
存储 JavaScript 前端开发
js的map和set |21
js的map和set |21
|
机器学习/深度学习 JavaScript 前端开发
JavaScript typeof, null, 和 undefined
JavaScript typeof, null, 和 undefined
272 5
|
设计模式 Java 程序员
拜托!别再滥用 != null 判空了!!——优化你的代码,提升开发效率
【8月更文挑战第20天】在软件开发的世界里,null 值的存在如同一把双刃剑,既提供了灵活性,也带来了复杂性。而!= null 的判空操作,几乎成了每个程序员日常编码中的“标配”。然而,过度依赖这种简单直接的判空方式,往往会导致代码可读性下降、逻辑冗余、甚至引入难以察觉的bug。今天,我们就来探讨一下如何优雅地减少或避免滥用!= null判空,从而提升代码质量和开发效率。
633 3
解决微软云Azure Function运行报错-Value cannot be null. (Parameter ‘provider‘)
解决微软云Azure Function运行报错-Value cannot be null. (Parameter ‘provider‘)
398 4
|
JavaScript 前端开发
15 Uncaught TypeError: Cannot set properties of null (setting ‘onclick‘)
这篇文章解释了在HTML文档中因JavaScript代码在页面元素加载之前执行导致的"Cannot set properties of null (setting ‘onclick’)"错误,并提供了将JavaScript代码置于`<body>`标签内或使用`window.onload`事件确保DOM完全加载后再绑定事件处理器的解决办法。
15 Uncaught TypeError: Cannot set properties of null (setting ‘onclick‘)
|
存储 JavaScript 前端开发
|
开发者 图形学 C#
揭秘游戏沉浸感的秘密武器:深度解析Unity中的音频设计技巧,从背景音乐到动态音效,全面提升你的游戏氛围艺术——附实战代码示例与应用场景指导
【8月更文挑战第31天】音频设计在游戏开发中至关重要,不仅能增强沉浸感,还能传递信息,构建氛围。Unity作为跨平台游戏引擎,提供了丰富的音频处理功能,助力开发者轻松实现复杂音效。本文将探讨如何利用Unity的音频设计提升游戏氛围,并通过具体示例代码展示实现过程。例如,在恐怖游戏中,阴森的背景音乐和突然的脚步声能增加紧张感;在休闲游戏中,轻快的旋律则让玩家感到愉悦。
1038 0
|
C++ Python
【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误
【Azure 应用服务】Azure Function Python函数部署到Azure后遇见 Value cannot be null. (Parameter 'receiverConnectionString') 错误
266 0
|
JavaScript 前端开发 C++
【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
244 0
|
前端开发 JavaScript 开发者
JavaScript中的哲学难题:深入探讨undefined与null的情感纠葛
【8月更文挑战第23天】在Web前端开发中,理解和区分`undefined`与`null`至关重要。`undefined`表示变量已声明但未赋值,常出现在未初始化的变量或函数无返回值的情形;`null`则是开发者主动赋值的结果,意味着变量虽存在但值为空。虽然`undefined == null`为真,但`undefined === null`为假,表明它们在语义上有明显差异。合理使用两者能增强代码的健壮性和可读性,避免运行时错误。
399 0

热门文章

最新文章