开发者问题收集

未捕获的类型错误:无法读取 null 的属性“getAttribute”

2015-09-12
109384

我刚开始学习 JavaScript。我只想构建一个图片轮播,但第一行就出错了:

Uncaught TypeError: Cannot read property 'getAttribute' of null

js:

function changeImage(){
    var imageSrc=document.getElementById("image").getAttribute("src");
}
changeImage();

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="hello.js"></script>
    <title></title>
</head>
<body>
    <div id="button_left">
        <img id ="left" src="left.png">
    </div>
    <div id="button_right">
        <img id ="right" src="right.png">
    </div>
    <div class="container">
        <img id ="image" src="1.jpg">
    </div>
    <div id="result"></div>
</body>
</html>
3个回答

问题在于,在目标元素加载之前,脚本中的 document.getElementById("image") 就被调用了,从而返回 undefined / null 。然后,在 undefined / null 对象上调用链式 .getAttribute("src")

许多可能的解决方案之一是在页面加载后执行该函数。将脚本中的代码更改为以下内容:

window.onload = function () { var imageSrc=document.getElementById("image").getAttribute("src"); }

hello.js 中,将在页面完全加载后执行脚本。

其他答案涵盖了解决此问题的其他几种方法。

Fr0zenFyr
2018-02-28

发生错误是因为在调用该方法时尚未加载“image”对象。

您需要在 DOM 加载后运行“changeImage()”方法,例如在 body onload 事件中,

<body onload="changeImage();">

或者在 body 最后添加脚本标记,确保图像对象已加载。

Asons
2015-09-12

尝试这种方式:

var imageSrc = document.querySelectorAll('image[id=your-image-id]')[0].getAttributeNode("src").value;

或者使用 jQuery:

var imageSrc = $('image[id="your-image-id"]').attr('src');
Dũng IT
2017-04-27