javascript - 只有 "onload"形式的 JavaScript 函数有效吗?

标签 javascript function typeerror

我有一个可以动态定位背景图像的 JavaScript 函数:

  window.onload = function() {
    bw = document.getElementsByClassName("BottomWrapper");
    if (bw.length===0){
      bw = document.getElementsByClassName("BottomWrapper2");
    }
    pos = window.innerWidth/2 - 490.5;
    bw=Array.prototype.slice.call(bw);
    bw[0].style.backgroundPosition="center 0px, " + pos + "px 0px";
  };

并且它有效。但是如果我命名相同的函数并运行它:

function position() {
  bw = document.getElementsByClassName("BottomWrapper");
  if (bw.length===0){
    bw = document.getElementsByClassName("BottomWrapper2");
  }
  pos = window.innerWidth/2 - 490.5;
  bw=Array.prototype.slice.call(bw);
  bw[0].style.backgroundPosition="center 0px, " + pos + "px 0px";
};
position();

我收到错误:

TypeError: Cannot read property 'style' of undefined

我很困惑。为什么第一个功能有效,而第二个功能无效?

最佳答案

如果 bw[0] 未定义,则意味着 document.getElementsByClassName("BottomWrapper2") 返回未定义,这很可能意味着运行脚本时 div 不在页面上。如果您在标记之后加载代码,则不会发生这种情况。

第一个可以工作的原因是它正在等待 onload 事件触发。

关于javascript - 只有 "onload"形式的 JavaScript 函数有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13793506/

相关文章:

javascript - 使用 Mootools 获取元素内的特定元素

c++ - int foo(类型和栏);是不好的做法?

javascript - 表单清除按钮功能无法正常工作

Javascript - 提升优先级

javascript - For 循环 Canvas 动画

javascript - React Updater 功能不起作用。常规 setState 不知何故? (无法读取 null 的属性 'name')

javascript - react : TypeError: Cannot read property 'addEventListener' of null

javascript - 未捕获的类型错误 : Cannot read property 'toLowerCase' of undefined

javascript - LiveValidation - 将验证消息更改为图片?

javascript - 为什么容器边框会扰乱 Masonry.js 元素的放置?