未触发JavaScript事件窗口.onload

未触发JavaScript事件窗口.onload,javascript,onload,onload-event,Javascript,Onload,Onload Event,我在一个网站上有以下代码: window.onload = resize; window.onresize = resize; function resize(){ heightWithoutHeader = (window.innerHeight - 85) + "px"; document.getElementById("main-table").style.height = heightWithoutHeader; document.getElementById("n

我在一个网站上有以下代码:

 window.onload = resize;
 window.onresize = resize;

 function resize(){
  heightWithoutHeader = (window.innerHeight - 85) + "px"; 
  document.getElementById("main-table").style.height = heightWithoutHeader;
  document.getElementById("navigation").style.height = heightWithoutHeader;
 }
onresize
工作正常,但是
onload
事件从不触发。我在Firefox和Chrome上都试过,但都不管用


谢谢你的帮助,为了名誉而努力;D

如果它真的按照那个顺序,它肯定不会起作用。在声明函数本身之前,您不能将函数分配给事件处理程序。

当您调用函数resize()旁边的“window.onload”时,这将起作用。

这对我很有效,我认为您的问题出在其他地方:

 function resize(){
  var tester = document.getElementById("tester"),
      html = tester.innerHTML

  tester.innerHTML = html + "resize <br />"
 }  

window.onload = resize;
window.onresize = resize;
function resize(){
var tester=document.getElementById(“tester”),
html=tester.innerHTML
tester.innerHTML=html+“调整大小
” } window.onload=调整大小; window.onresize=调整大小;
您可以在此处自行测试:


你确定这是唯一一个名为onLoad的事件吗?可能是另一个onLoad事件造成了冲突

我认为这里可能发生的是您的
窗口。onLoad
稍后将被覆盖,请检查以确保它不是通过


您可以通过重新调整大小功能中的
警报(window.onload)
来检查这一点,以查看实际附加的内容。

我在添加合作伙伴所需的第三方jQuery代码时遇到了这种情况。我本可以轻松地将过时的window.onload转换为jQuery文档。也就是说,我想知道是否有一个现代的、跨浏览器兼容的解决方案

window.addEventListener ? 
window.addEventListener("load",yourFunction,false) : 
window.attachEvent && window.attachEvent("onload",yourFunction);
现在我知道了。。。我可以将代码转换为使用jQuery路由。而且,我会要求我们的合作伙伴重构他们的代码,这样他们就不会影响网站了


我找到修复程序的源-->

将window.onload行移动到javascript文件的末尾或初始函数之后,它将工作:

function resize(){
    heightWithoutHeader = (window.innerHeight - 85) + "px"; 
    document.getElementById("main-table").style.height = heightWithoutHeader;
    document.getElementById("navigation").style.height = heightWithoutHeader;
}
// ...
// at the end of the file...
window.onload = resize;
window.onresize = resize;
但如果不更换onload,这是一个最佳实践。而是将函数附加到onload事件:

function resize(){
    heightWithoutHeader = (window.innerHeight - 85) + "px"; 
    document.getElementById("main-table").style.height = heightWithoutHeader;
    document.getElementById("navigation").style.height = heightWithoutHeader;
}
// ...
// at the end of the file...
window.addEventListener ? 
    window.addEventListener("load",resize,false) 
    : 
    window.attachEvent && window.attachEvent("onload",resize);

这对我有效,对我的英语也很抱歉。

对我来说,
window.onload
script type=“text/javascript
标记中写入时不起作用


相反,我们需要在
script language=“Javascript”type=“text/Javascript
标记中编写相同的代码,它工作得很好。

这个答案适用于那些来到这里的人,因为他们的window.onload不会触发

我发现以下方法是可行的

window.onload = myInitFunction;

引用的函数(在本例中为myInitFunction)必须驻留(或定义)在同一个-element中,或在建立onload事件的-element之前发生的-element中。否则它将无法工作

因此,这将不起作用:

<html>
  <head>
    <title>onload test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <script>
      window.addEventListener("load", myInitFunction)
    </script>

    <script>
      function myInitFunction() {
        alert('myInitFunction');
      }
    </script>

  </head>
  <body>
    onload test
  </body>
</html>
<html>
  <head>
    <title>onload test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <script>
      function myInitFunction() {
        alert('myInitFunction');
      }
    </script>

    <script>
      window.addEventListener("load", myInitFunction)
    </script>

  </head>
  <body>
    onload test
  </body>
</html>
你写

window.onload = function() { myInitFunction() };
window.addEventListener("load", function() { myInitFunction() }); 
或者,代替写作

window.onload = myInitFunction;
window.addEventListener("load", myInitFunction);
你写

window.onload = function() { myInitFunction() };
window.addEventListener("load", function() { myInitFunction() }); 
另一种解决方法是使用旧的

<body onload="myInitFunction()">

就我而言

window.addEventListener("load", function() {
    myDropdownFunction();
});
令人惊讶的是(对我来说)并没有帮助(当用户使用浏览器后退按钮时,我试图为下拉列表设置一个值)。和
window.onload
不起作用的原因是尼克·克雷弗♦ 上面已经解释过-它被
覆盖

因此,我使用jQuery尝试了这个方法,效果非常好:

$(window).on('pageshow', function() {
    alert("I'm happy");
});

你什么时候运行这个代码?
onload
是否可能稍后被覆盖,或者在
load
事件触发后被附加?您是对的。window.onload显然已被稍后的文件覆盖。请将您的评论作为答案发布,这样我就可以把它作为正确的答案。完成:)很高兴您解决了它!正如Nick Craver所说,了解更大的上下文以及何时实际调用它会很有帮助。错误答案:在相同的javascript范围内,允许但不建议在使用后声明变量或函数。试试:“var a=fun(42);函数fun(n){return n;};console.log(a);”我不明白为什么,但这段代码对我不起作用。我用我的函数
runCode
替换了
yourFunction
,我甚至按照下面的建议将addEventListener行移到了脚本的底部。我知道三元运算符,但我不明白什么是
window.addEventListener是否,它是否检查窗口上是否已经存在事件侦听器?这对我很有用。感谢上帝。请注意,您需要有一个要调用的函数;-)我把它放在好的地方,它为我工作!谢谢你救了我一天它也为我工作。