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

Posted nanke_yh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js代码Uncaught TypeError: Cannot set properties of null (setting ‘innerHTML‘)问题解决相关的知识,希望对你有一定的参考价值。

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

        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>

结果:

 

以上是关于js代码Uncaught TypeError: Cannot set properties of null (setting ‘innerHTML‘)问题解决的主要内容,如果未能解决你的问题,请参考以下文章

JS报错:Uncaught TypeError: Illegal constructor

d3.js Faux-3D Arcs - Uncaught typeerror:无法读取未定义的属性“对象”

如何解决 Uncaught TypeError: this.filters is not a function ? (vue.js 2)

Laravel 5.1 和 Vue.js - 21678 Uncaught (in promise) TypeError: Cannot read property 'data' of null

JS监听事件错误:Uncaught TypeError: xx(函数名)is not a function at HTMLInputElement.onclick

Uncaught TypeError: Bootstrap dropdown require Popper.js (https://popper.js.org)(下拉菜单)