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>

结果:

 

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: "uncaught typeerror: cannot set properties of null" 意思是在设置 innerHTML 属性时出现了错误,因为 null 没有 innerHTML 属性可以设置。这通常是因为程序中的变量或对象未正确初始化或引用了不存在的元素,导致该变量或对象为 null。 ### 回答2: 这是一个JavaScript错误,通常意味着你尝试设置nullinnerHTML属性。在JavaScript中,null表示一个空的值,也就是没有值。如果你正在尝试使用innerHTML属性设置null的内容,JavaScript将抛出Uncaught TypeError错误。 通常这种错误出现在尝试访问或修改DOM元素时。例如,你可能正在尝试使用document.getElementById()方法获取一个不存在的元素,或者正在尝试使用innerHTML属性设置一个不存在的元素的内容。这些都会导致Uncaught TypeError错误。 为了解决这个错误,你需要找出代码中出现了什么问题。首先确认你正在尝试访问或修改的元素是否存在。如果不存在,修复代码以确保你可以正确地获取到元素。如果元素存在,检查你的代码是否正确设置了其属性。确保你没有尝试在null元素上设置属性。 要防止出现这种类型的错误,你可以在访问或修改DOM元素之前对其进行条件检查,以确保元素存在。如果元素不存在,可以弹出一个警告消息或者进行其他错误处理操作。 总之,该错误意味着你在尝试操作null值,而这是不允许的。通过检查你的代码并确保正确访问和设置DOM元素属性,你可以轻松地避免这种类型的错误。 ### 回答3: 这个错误是JavaScript中的一个常见错误,通常出现在访问DOM元素时,该元素未能被正确地引用。在这种情况下,often会在调试控制台中显示错误消息: "uncaught typeerror: cannot set properties of null (setting 'innerhtml')”。 这个错误是由于JavaScript尝试对一个未被初始化的元素进行写入操作而导致的。在这种情况下,浏览器会解释代码并尝试找到要修改的元素,但由于元素未正确初始化或不存在,代码就会停止执行并出现错误。 解决这个错误的最佳方法是确保所有DOM元素都已被正确引用。如果您想要设置元素的innerhtml属性,您必须确保该元素存在并且已被正确地引用。您可以使用JavaScript中的getElementById()方法来获取DOM元素并将其存储在变量中,然后可以在代码中引用该变量以进行写入操作。 如果您发现自己无法成功引用元素,您可能需要检查元素的ID或其他属性是否正确。您还可以使用浏览器的开发工具来检查文档结构并确定元素是否存在。 总之,这个错误通常是由于JavaScript试图引用未初始化的DOM元素而导致的。确定所有DOM元素都已被正确引用,可以解决这个错误,并确保代码能顺利运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nanke_yh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值