Uncaught TypeError: Cannot set property ‘innerHTML‘ of null

我的HTML代码

<span id="nickname"></span>
<div id="introduce"></div>

我的JS代码

 // JavaScript
    // 试图控制器
    var userInfo = {}
    Object.defineProperty(userInfo, 'nickName', {
      get: function(){
        return document.getElementById('nickname').innerHTML
      },
      set: function(nick){
        document.getElementById('nickName').innerHTML = nick
      }
    })
    Object.defineProperty(userInfo, 'introduce', {
      get: function(){
        return document.getElementById('introduce').innerHTML
      },
      set: function(introduce){
        document.getElementById('introduce').innerHTML = introduce
      }
    })

    userInfo.nickName = 'hls'
    userInfo.introduce = '我是哈哈哈,会不会,会不会,会不会'

起初我是这么写的,但是一直报错:

Uncaught TypeError: Cannot set property 'innerHTML' of null

于是就去查了很多资料:
在这里插入图片描述
我的天,网上居然一堆…

比较靠谱的是:

js中"Uncaught TypeError: Cannot set property ‘innerHTML’ of null"错误

这种情况时就会报错,这样写默认是从上往下读的在js代码部分那时候还没有p这个标签,因此无法获取该id

有两个解决办法
1.把script放到p标签的下面

2.使用window.onload
window.onload的作用是把js代码放到最后加载,因此就不用担心上述问题了

Cannot set property ‘innerHTML’ of null 问题的解决

错误

第一次写web 前端代码,出现了“Cannot set property ‘innerHTML’ of null”的错误代码,然后不知道原因在哪?

解决方案

在网上查了下资料,原来是js 代码从上往下执行时,没有找到合适的标签而出错。类似于在编程中使用一个未定义的变量,所以一定要在使用变量之前对其进行定义

Uncaught TypeError: Cannot set property ‘innerHTML’ of null

引用1:

通过调试发现在js中的一段代码没有执行到,报以下错误

Uncaught TypeError: Cannot set property 'innerHTML' of null 

然后查询该错误原因,结果是因为js引用放在了页面的头部,在修改 innerHTML 属性时找不到该属性,因为需要修改一个html标签中的内容,因此需要html加载并解析完成之后才能找到对应id的标签,在 head 处引用 js 导致 js 找不到对应 id ,当将 js 引用放在 body 尾部之后就可以正常显示了。

引用2:

当出现以下错误:"……is not defined”、"Uncaught TypeError: Cannot set property ‘innerHTML’ of null”、“document.getElementById(“Clock”) is null” 时请注意!

很有可能是js文件中调用了html中的对象,并且js在这个调用的对象之前加载了。

所以呢,只要把js文件引用或代码放到最后或调用的对象后面就行了。

补充:正确的写法应该是在请用对象之前作个判断。 if(document.getElementById("dd")){....}

我觉得我都试过了,但是我还是没有成功。。。

后来我调试了一下,是id名字有问题。。。

在这里插入图片描述
nickname才能正确找到,nickName是null…

最后经过一番瞎折腾,我的源码最终如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div>
    尊敬的:<span id="nickname"></span><br /><br />
    <div id="introduce"></div>
  </div>
  <script type ="text/javascript">
    // JavaScript
   // 试图控制器
   console.log(document.getElementById("nickname"))
   console.log(document.getElementById("nickName"))
   window.onload = function() {
    if(document.getElementById("nickname") && document.getElementById("introduce")){
      var userInfo = {}
    Object.defineProperty(userInfo, 'nickname', {
      get: function(){
        return document.getElementById('nickname').innerHTML
      },
      set: function(nickName){
        document.getElementById('nickname').innerHTML = nickName
      }
    })
    Object.defineProperty(userInfo, 'introduce', {
      get: function(){
        return document.getElementById('introduce').innerHTML
      },
      set: function(introduce){
        document.getElementById('introduce').innerHTML = introduce
      }
    })
    
    userInfo.nickname = 'hls'
    userInfo.introduce = '一个用户的所有请求操作都应该属于同一个会话'
    }
   }
  
  </script>
  <!-- <script src="./userInfo.js"></script> -->
</body>
</html>

显示效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿珊和她的猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值