js Cannot set properties of null(setting ‘onclick‘)问题分析

 更新时间:2025年03月02日 21:59:13   作者:NEXT00  
今天增加功能的时候,提示Uncaught TypeError: Cannot set properties of null (setting onclick)问题分享下,需要的朋友可以参考下

个人学习过程中遇到“Uncaught TypeError: Cannot set properties of null (setting ‘onclick’)”问题,分享下

未捕获的类型错误: 无法设置属性意思就是,无法获取到dom节点,从而导致无法对dom节点进行相关的操作,即无法设置相关dom节点的属性。

我下面用代码示例一下。

<!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>javascript之鼠标事件之按钮控制改变div盒子的背景颜色</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            border: 1px red solid;
            background-color: red;
        }
    </style>
    <script>
      var  b=document.getElementById("an");
           b.onclick=function(){
           b.style.background="#ffefa1";
        };
    </script>
</head>
<body>
    <div id="an">可以试一下</div>
</body>
</html>

报错原因

这个代码你读一下,好像可以实现我们想要的效果,实现点击相关的div盒子实现其背景颜色变颜色的效果,但是一运行下来,在调试控制台里就会出现Uncaught TypeError TypeError: Cannot set properties of null (setting 'onclick')这样的报错------未捕获的类型错误: 无法设置属性

意思就是,无法获取到dom节点,从而导致无法对dom节点进行相关的操作,即无法设置相关dom节点的属性。

那又为什么不能获取dom节点呢?我不是写了 这个获取相关标签dom节点的js代码吗?

var  b=document.getElementById("an");

这就跟我们怎么在 HTML 中引入 JavaScript有关了,

那么我们怎么在 HTML 中引入 JavaScript 呢?

引入方式与 CSS 相似,有以下三种方式:

  1. 在 HTML 标签中直接引入,针对一些特别简短的 JavaScript 代码。
  2. 使用 script 标签可以将 JavaScript 代码嵌入到 HTML 文档的 head 和 body 里。
  3. 使用外部 JavaScript 文件,将 JavaScript 脚本代码写入一个后缀为 .js 的文件中,通过给 script 标签设置 src 属性的方式,引入这个文件。

我们这个例子的代码是在head标签里面引入 JavaScript 代码,html中的代码是编译一行就执行一行,我们已经在前面把 JavaScript这个代码已经使用完了,到后面执行html代码后,就没有这个javascipt代码了,所以就没有实现那个我们想要的javascipt代码的效果,。

解决办法:

思路一,既然是因为body标签后面没有javascipt代码,才导致的执行相关的操作,那就把相应的javascipt代码放在body标签后面就行了,例如:

<!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>javascript之鼠标事件之按钮控制改变div盒子的背景颜色</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            border: 1px red solid;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id="an">可以试一下</div>
</body>
<script>
    var b = document.getElementById("an");
    b.onclick = function () {
        b.style.background = "#ffefa1";
    };
</script>
</html>

思路二,我们可以使用window.onload() 这个方法,

window.onload() 方法用于在网页加载完毕后立刻执行的操作,即当 HTML 文档加载完毕后,立刻执行某个方法。

window.onload() 通常用于 <body> 元素,在页面完全载入后(包括图片、css文件等等)执行脚本代码。

使用window.onload()这个方法,就不用考虑javascript代码的位置了,因为使用window.onload(),只要网页加载完,就会触发相应的效果,例如,

<!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>javascript之鼠标事件之按钮控制改变div盒子的背景颜色</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            border: 1px red solid;
            background-color: red;
        }
    </style>
    <script>
        window.onload=function(){
      var   b=document.getElementById("an");
        b.onclick=function(){
            b.style.background="#ffefa1";
        };};
    </script>
</head>
<body>
    <div id="an">可以试一下</div>
    <button >点击</button>
</body>
</html>

一般就是因为获取不到对象

1、对象名不正确 例如 id、class获取不正确

2、对象不存在,检查拼写错误

3、是不是js代码应该写到最后

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>WEB API学习</title>
</head>
<body>
    <button id="btn">母校</button>
    <script>
        var btn = document.getElementById(" btn ");
        btn.onclick =function(){
            alert('xtu');
        }
    </script>
</body>
</html>

运行结果:

问题原因:getElementById方法无法找到所写的id名(空格也被认为是id名的一部分了)
修改前代码:

var btn = document.getElementById(" btn ");

修改后:

var btn = document.getElementById("btn");

运行成功!

JQuery 之 在数据加载完成后才自动执行函数

进入页就执行,不论等数据是否加载完成:

$(window).load(function(){ ... });  

数据加载完成执行:

$(document).ready(function(){ ... })
这个还可以简写成
$(function(){ ... });

出现这样的问题,说明dom结构加载慢,大家可以将代码封装到jquery的加载完成再执行即可,就不会出现这样的错误了

到此这篇关于js Cannot set properties of null(setting ‘onclick‘)问题分析的文章就介绍到这了,更多相关js Cannot set properties of null内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript 实现生命游戏

    JavaScript 实现生命游戏

    这篇文章主要介绍了JavaScript 实现生命游戏的示例步骤,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下
    2021-04-04
  • javascript模拟git diff命令实现文本文件差异比较

    javascript模拟git diff命令实现文本文件差异比较

    这篇文章主要为大家详细介绍了javascript如何模拟git diff命令实现文本文件差异比较效果,文中的示例代码讲解详细,感兴趣的小伙伴可以参考下
    2023-12-12
  • JavaScript error浏览器端错误捕获处理方法笔记解决示例

    JavaScript error浏览器端错误捕获处理方法笔记解决示例

    这篇文章主要为大家介绍了JavaScript error浏览器端错误捕获处理方法笔记解决示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • JavaScript中你不知道的Object.entries用法

    JavaScript中你不知道的Object.entries用法

    大家应该都知道,Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致,这篇文章主要给大家介绍了关于JavaScript中你不知道的Object.entries用法的相关资料,需要的朋友可以参考下
    2021-10-10
  • js利用正则表达式检验输入内容是否为网址

    js利用正则表达式检验输入内容是否为网址

    这篇文章主要为大家详细介绍了js利用正则表达式检验输入内容是否为网址的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • js实现图片推拉门效果代码实例

    js实现图片推拉门效果代码实例

    这篇文章主要介绍了js实现图片推拉门效果代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • JavaScript重载函数实例剖析

    JavaScript重载函数实例剖析

    通过本文给大家简单介绍下JavaScript重载函数的相关知识,在js中有没有重载函数这个概念呢?很多朋友都很模糊,说不太清楚,下面通过本文给大家介绍js重载函数,一起学习吧
    2016-05-05
  • 详解js跨域原理以及2种解决方案

    详解js跨域原理以及2种解决方案

    这篇文章主要介绍了js跨域原理以及解决方案,跨域问题是由于javascript语言安全限制中的同源策略造成的,想要进一步了解跨域的朋友可以参考本文进行学习
    2015-12-12
  • js为什么[]==![]是成立的吗

    js为什么[]==![]是成立的吗

    本文主要介绍了js为什么[]==![]是成立的吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 一个类似vbscript的round函数的javascript函数

    一个类似vbscript的round函数的javascript函数

    同vbscript的Round函数功能相同,四舍五入保留指定小数位数
    2009-04-04

最新评论