这是一个前端页面开发中常见的bug,自己也不是第一次遇到了。但是由于自己不是经常写前端代码,所以每次重新遇到都要再回忆一下是原因和解决方案,那就记下来以防下次再遇到吧。

bug重现
项目使用Ext组件,需求是在页面上展示一个图片,图片地址作为参数从上一页面传入。我的思路比较简单,就是新建一个pannel,里面写一个html的代码段,代码段大概长这样

"<img id='qrImage' src='com/system/empty.bmp' width='100%' height='100%'>"
1
图片的初始地址是一个临时图片,当获取到我们需要展现的图片地址时,就使用操作页面dom设置为新的地址,设置的地址长这样:

document.getElementById("qrImage").src = filePath;
1
看上去,没有任何的问题,但是页面加载的时候却报错了,错误就在上面这个语句,报错信息是:

Uncaught TypeError: Cannot set property 'src' of null
1
解决思路
不常写前端一下子就露怯了,我第一反应竟然是是不是获取ID的方法写的有问题,比如字母大小写拼错之类的问题。然而现实是残酷的,W3C告诉我方法没有任何问题。
那么既然不是获取属性的方法没问题(其实就不可能是方法名字写错了,不然浏览器会报 is not a function),那肯定是这个dom本身写的有问题。最直观的办法当然就是debug了,bug也比较简单,跟进去就发现了问题。

原因
“document.getElementById(“qrImage”)”这里,代码没有获取到Id为“qrImage”的元素,那么就是null,null是没有办法set属性的,所以就会浏览器就会抛出这个错误:

Uncaught TypeError: Cannot set property 'src' of null
1
之后页面的渲染就会停止,页面报错。

解决办法
解决办法也很简单,就是确保在设置属性之前,qrImage这个元素已经被渲染完成,浏览器可以获取到这个元素,这样的话就不会报错。我的项目实际使用了Ext组件,并且使用了ExtBuilder来简化开发(说明这个是为了防止我的写法在其他情况下不适用),将代码替换为:

var infoPanel = Ext.getCmp("saveQR");
infoPanel.html = "<img id='qrImage' src=\"" + url+ "\" width='100%' height='100%'>";
1
2
问题即可解决。

tips
对于没有使用Ext或者Ext开发组件的小伙伴,可以使用window.load或者afterrender方法来确保页面加载完再对页面进行操作即可。

转载于:https://www.cnblogs.com/taofengfeng/p/10874718.html

【转】Uncaught TypeError: Cannot set property ' ' of null 错误解决相关推荐

  1. chrome浏览器不能录音:Uncaught TypeError: Cannot read property ‘getUserMedia‘ of undefined解决方法

    Uncaught TypeError: Cannot read property 'getUserMedia' of undefined解决方法 javascript 打不开浏览器录音功能的问题解决方 ...

  2. jquery.dataTables.min.js: Uncaught TypeError: Cannot read property 'style' of undefined

    Jquery DataTable使用报这个错: jquery.dataTables.min.js: Uncaught TypeError: Cannot read property 'style' o ...

  3. 【StackFlow】Uncaught TypeError: Cannot read property 'pageCount' of undefined

    Exception 使用Ext JS 4 分页查询时,当查询结果为0时报错: Uncaught TypeError: Cannot read property 'pageCount' of undef ...

  4. Uncaught TypeError: Cannot read property 'setAttribute' of null

    Uncaught TypeError: Cannot read property 'setAttribute' of null 其实就是js中空指针异常 h5splayer.js:1 Uncaught ...

  5. Uncaught TypeError: Cannot read property 'value'' of null

    在用JS实现ajax做网页聊天室的时候,报了一个错误: Uncaught TypeError: Cannot read property 'value'' of null at chat (Gluti ...

  6. Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?

    Uncaught TypeError: Cannot read property 'length' of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"t ...

  7. (原创)JS点击事件——Uncaught TypeError: Cannot set property 'onclick' of null

    html部分代码: JS部分代码: 需要实现的效果:点击图片,来回相互切换. 我开始的错误做法:代码如上图所示(逻辑上看起来是没有错误的) 尝试过程:把JS代码放在</body>闭合标签之 ...

  8. JS Uncaught TypeError: Cannot read property ‘indexOf‘ of null问题解决

    问题描述: Uncaught TypeError: Cannot read property 'indexOf' of null 问题分析: 使用indexOf()的变量为null. 问题解决: 1. ...

  9. 对于Uncaught TypeError: Cannot set property ‘innerHTML‘ of null 的理解

    在w3school自学JavaScript时,发现一个很有意思的问题.首先看下面代码: <!DOCTYPE html> <html> <body><h2> ...

最新文章

  1. 机器学习:如何用相关性实现特征选择?
  2. 以SYSTEM用户运行CMD
  3. Win7宽带连接错误678怎么办
  4. 链栈和递归实现迷宫算法
  5. C# 文件与Base64的相互转换
  6. 00023 自考高等数学
  7. python过滤违禁词_网站全站敏感词检测、广告违禁词查询很简单,一个python脚本轻松搞定...
  8. BUUCTF Misc 神秘龙卷风
  9. 2020-12-18
  10. SFP光模块相关知识
  11. 华为防火墙地址转换技术(NAT)
  12. java excel 模板 替换_java替换Excel字符
  13. C++时间戳time_t和时间结构体tm
  14. 如何为py图表添加坐标轴/标题/图例等辅助元素
  15. outStream.flush()
  16. 服务器启动显示防火墙,宝塔面板防火墙怎么打开
  17. 爱线段树的好孩子【九校2D1T3】优美序列
  18. 微信公众号开发---微信开发学习路线(及供参考)
  19. SpringBoot漏洞复现
  20. Linux 利用 yum 安装jdk并配置环境变量

热门文章

  1. layui移动端适配_web前端-移动端适配方案
  2. python加密解密算法_DES的加密与解密算法(Python实现)
  3. leetcode刷题:删除链表中的节点
  4. java canvas旋转_在HTML5 Canvas上将图像旋转90度
  5. 找回华为云删除的通讯录_找回小米手机误删照片只要10秒!人人都知道的方法,你怎能不知道...
  6. Linux系统中的CPU利用率
  7. php 重定向 post,使用php curl getpost方法向页面文件发送重定向指令
  8. haoop 负载均衡
  9. 4.10 风格代价函数
  10. neo4j limit