关于js报错Uncaught TypeError: Cannot set properties of null (setting ‘innerHTML‘)

很多同学在写js代码的时候都遇到过这样的问题:

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

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

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

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        function showTime() {
            var today = new Date;
            var year = today.getFullYear();
            var month = checkNum(today.getMonth() + 1);
            var data = checkNum(today.getDate());
            var hour = today.getHours();
            var minute = checkNum(today.getMinutes());
            var second = checkNum(today.getSeconds());
            var day = today.getDay();
            var a = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
            var tip = '上午'
            if (hour > 12) {
                hour -= 12;
                tip = '下午'
            }
            var time = year + '年' + month + '月' + data + '日' + ' ' + tip + ' ' + hour + ':' + minute + ':' +
                second + ' ' + a[day];
            document.getElementById('time').innerHTML = time;//报错,无法读取内部HTML。
        }

        function checkNum(num) {
            if (num < 10) {
                return '0' + num;
            }
            return num;
        }
        setInterval(showTime, 1000);
    </script>
</head>

<body>
    <div id="time"> </div> //此时的div并没有被加载。
</body>
</html>

 解决:将 setInterval(showTime, 1000);这一行代码放到body之后:

<body>
    <div id="time"> </div>
</body>
<script>
    setInterval(showTime, 1000);
</script>
</html>

 或在原本的script标签中添加window.onload

        window.onload = function () {
            setInterval(showTime, 1000);
        }
    </script>

这样就可以完美解决啦!

  • 48
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答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元素都已被正确引用,可以解决这个错误,并确保代码能顺利运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值