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

目录
相关文章
|
4月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
475 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
4月前
|
JavaScript 前端开发 Java
除了 JavaScript,还有哪些编程语言支持 Set 类型
【10月更文挑战第30天】这些编程语言中的 `Set` 类型虽然在语法和具体实现细节上有所不同,但都提供了类似的集合操作功能,方便开发者在不同的编程场景中处理集合相关的数据和逻辑。
|
6月前
|
存储 JavaScript 前端开发
js的map和set |21
js的map和set |21
|
6月前
|
JavaScript 前端开发
JavaScript 中的新 Set 方法
JavaScript 中的新 Set 方法
48 1
|
7月前
|
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‘)
|
7月前
引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
引用 AspNetCoreRateLimit => StatusCode cannot be set because the response has already started.
132 0
|
7月前
|
SQL 关系型数据库 MySQL
mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据
对于数据库开发的专业人士来说,理解NULL的特性并知道如何正确地在查询中处理它们是非常重要的。以上所介绍的技巧和实例可以帮助你更精准地执行数据库查询,并确保数据的完整性和准确性。在编写代码和设计数据库结构时,牢记这些细节将有助于你避免许多常见的错误,提高数据库应用的质量与性能。
210 0
|
7月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 IS NULL
【8月更文挑战第12天】
744 0
在 MySQL 中使用 IS NULL
|
8月前
|
SQL 存储 索引
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
|
9月前
|
SQL 关系型数据库 MySQL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
923 0

热门文章

最新文章