Javascript 未捕获类型错误:无法读取属性';getAttribute';changeImage处的空值

Javascript 未捕获类型错误:无法读取属性';getAttribute';changeImage处的空值,javascript,Javascript,我越来越 未捕获的TypeError:无法在浏览器控件中的changeImage函数处读取null的属性“getAttribute” 但是幻灯片看起来效果不错。不知道为什么会显示此错误消息。 谁能告诉我为什么会这样 我的密码 HTML: 正是它说的 (null).getAttribute("src") 因此,无论您在哪里调用changeImage()(在您的问题中,您没有演示这一点),DOM中都没有这样的元素,或者DOM还没有准备好进行操作 DOM未就绪,但调用了changeImage()

我越来越

未捕获的TypeError:无法在浏览器控件中的changeImage函数处读取null的属性“getAttribute”

但是幻灯片看起来效果不错。不知道为什么会显示此错误消息。 谁能告诉我为什么会这样

我的密码

HTML:

正是它说的

(null).getAttribute("src")
因此,无论您在哪里调用
changeImage()
(在您的问题中,您没有演示这一点),DOM中都没有这样的元素,或者DOM还没有准备好进行操作

  • DOM未就绪,但调用了
    changeImage()
  • 多姆准备好了
  • 间隔现在触发另一个
    changeImage()
  • 元素被找到
  • 滑块现在可以工作了,但在console中仍然存在以前的错误

故障保护最好:

function changeImage() {
  var image = document.getElementById("image");
  if (!image) return; // failsafe

  // other code here

}   
并始终将您的
右侧放在关闭
标签之前


此外,为了分离关注点和更好的代码体系结构,请尝试放弃内联
样式
脚本
onclick
一样使用
元素等更好的替代方法。addEventListener
直接从JS代码开始:

var btnPlay = document.getElementById("play");
btnPlay.addEventListener("click", startSlideShow);
HTML:

播放
确切地说

(null).getAttribute("src")
因此,无论您在哪里调用
changeImage()
(在您的问题中,您没有演示这一点),DOM中都没有这样的元素,或者DOM还没有准备好进行操作

  • DOM未就绪,但调用了
    changeImage()
  • 多姆准备好了
  • 间隔现在触发另一个
    changeImage()
  • 元素被找到
  • 滑块现在可以工作了,但在console中仍然存在以前的错误

故障保护最好:

function changeImage() {
  var image = document.getElementById("image");
  if (!image) return; // failsafe

  // other code here

}   
并始终将您的
右侧放在关闭
标签之前


此外,为了分离关注点和更好的代码体系结构,请尝试放弃内联
样式
脚本
onclick
一样使用
元素等更好的替代方法。addEventListener
直接从JS代码开始:

var btnPlay = document.getElementById("play");
btnPlay.addEventListener("click", startSlideShow);
HTML:

播放

我的最佳猜测是调用函数changeImage的位置。也就是说,在标记出现之前调用函数,这将导致document.getElementById不会返回任何可能重复的代码(除了停止按钮不起作用,因为您没有设置
interValId
)。我的最佳猜测是调用函数changeImage的位置。也就是说,您在标记出现之前调用函数,这会导致document.getElementById返回任何可能重复的代码,对我来说都没有问题(除了停止按钮不起作用,因为您没有设置
interValId
)。不必。请检查我的答案。@RandyCasburn是的,很好,但它仍然忽略了DOM还没有准备好的事实。DOM不一定要准备好-有了修复程序,在加载DOM之后才能调用函数。我明白你的意思了,但这是个简单的问题。他们会回来询问关于“关闭主体之前的脚本标记”的事情:-)“故障保护最好”:更好的办法是理解和解决问题,而不是绕过它。这不是DOM准备就绪的问题,因为只有用户按下按钮,脚本才会运行。肯定还有其他代码OP没有给我们看。没必要。请检查我的答案。@RandyCasburn是的,很好,但它仍然忽略了DOM还没有准备好的事实。DOM不一定要准备好-有了修复程序,在加载DOM之后才能调用函数。我明白你的意思了,但这是个简单的问题。他们会回来询问关于“关闭主体之前的脚本标记”的事情:-)“故障保护最好”:更好的办法是理解和解决问题,而不是绕过它。这不是DOM准备就绪的问题,因为只有用户按下按钮,脚本才会运行。肯定还有别的代码OP没有给我们看。