【问题标题】:window.onload doesn't work all the time. Whywindow.onload 并非一直有效。为什么
【发布时间】:2026-02-14 19:00:01
【问题描述】:

我一直在努力更改 src 属性以更改 javascript 中的图像。我正在使用window.onload = function(),但我的代码不起作用。我决定取出window.onload 并且奇迹般地我的代码工作了。 src 属性改变了页面上的图像。

我读过的很多文献都在吹嘘 window.onload 函数,好像为了让其他代码工作,加载网页是绝对必要的。我很困惑,因为在这种情况下它对我不起作用。我回忆起我最近正在处理的一项大学作业,该作业不适用于 window.onload 函数。这是我使用和不使用 window.onload 函数的脚本。谁能给我解释一下这个奇怪的地方。

  window.onload = function(){
  function myFunction(){
  document.getElementById("myImg").src = "people5.png";
  };
  };
  </script>
  </head>
 <body>
 <img id = "myImg" src="people1.png" width="240" height="240" alt="logo"/>
 <button onclick="myFunction()">Click me</button>

现在没有 window.onload

  function myFunction(){
  document.getElementById("myImg").src = "people5.png";
  };

 </script>
 </head>
 <body>
 <img id = "myImg" src="people1.png" width="240" height="240" alt="logo"/>
 <button onclick="myFunction()">Click me</button>

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:
    window.onload = function(){
      function myFunction(){
      document.getElementById("myImg").src = "people5.png";
      };
    };
    

    window.onload 中的myFunction() 是匿名函数的本地函数。当您在window.onload 之外声明myFunction 时,它是在全局范围内定义的,因此onclick 事件可以访问

    【讨论】:

    • 我明白你说 myFunction() 是本地的,window.onload 是全局的。这是否意味着全局变量或函数不能在局部函数中工作。我认为全局范围优先于本地范围。我不清楚你的答案。
    • @swydell 问题主要是 onClick="myFunction()" ,为了让 onclick 在这里工作,myFunction() 应该可以访问它,但由于 myFunction()window.onload 处理程序的本地,它不能可以通过 onclick 访问。旁注:全局变量始终可以在函数范围内访问。
    【解决方案2】:
      function myFunction(){
          document.getElementById("myImg").src = "people5.png";
        };
        window.onload = myFunction;
    

     <body onload='myFunction()' >
    

    【讨论】:

    • 我想我还有很长的路要走。我感谢您的回答,尽管我仍然对 onclick 有点困惑。是否超出了 myFunction 的范围。如何。是什么使函数无法访问处理程序。我不明白。
    最近更新 更多