如何在页面加载时调用JavaScript函数?

pal*_*laa 217 javascript onload

传统上,要在页面加载后调用JavaScript函数,您onload需要向包含一些JavaScript(通常只调用函数)的主体添加一个属性:

<body onload="foo()">
Run Code Online (Sandbox Code Playgroud)

当页面加载完毕后,我想运行一些JavaScript代码,用来自服务器的数据动态填充页面的各个部分.我不能使用该onload属性,因为我正在使用JSP片段,它没有body可以添加属性的元素.

还有其他方法可以在加载时调用JavaScript函数吗?我宁愿不使用jQuery,因为我对它不是很熟悉.

Mat*_*ker 350

如果你想让onload方法获取参数,你可以做类似的事情:

window.onload = function() {
  yourFunction(param1, param2);
};
Run Code Online (Sandbox Code Playgroud)

这会将onload绑定到一个匿名函数,该函数在调用时将使用您提供的任何参数运行所需的函数.当然,您可以从匿名函数中运行多个函数.

  • 如果另一个脚本已经加载了 window.onload 上的函数,则此方法将覆盖它。在某些情况下这可能是一个问题。document.addEventListener 方法对我来说似乎更可取。 (5认同)
  • 我没有说这是个好主意.虽然我工作的主要开发人员有一个很强的非发明此类综合症的案例,但我无法说服他在几页之外使用jquery. (4认同)
  • 那么也许你应该换工作.如果工作的正确工具不是你正在使用的工具,那么为什么还要不断地对抗那些不称职的人? (2认同)

Ahm*_*ani 63

另一种方法是使用事件监听器,在这里使用它们:

document.addEventListener("DOMContentLoaded", function() {
  you_function(...);
});
Run Code Online (Sandbox Code Playgroud)

说明:

DOMContentLoaded这意味着当文档的DOM对象完全加载并被JavaScript看到时,这也可能是"点击","焦点"......

function()匿名函数,将在事件发生时调用.

  • 请注意,这在IE 8及更低版本中不起作用.否则这是最好的纯JS解决方案! (4认同)

STW*_*STW 40

您的原始问题不清楚,假设凯文的编辑/解释是正确的,那么第一个选项不适用

典型的选项是使用该onload事件:

<body onload="javascript:SomeFunction()">
....
Run Code Online (Sandbox Code Playgroud)

你也可以将你的javascript放在正文的最后; 在文档完成之前,它不会开始执行.

<body>
  ...
  <script type="text/javascript">
    SomeFunction();
  </script>
</body>
Run Code Online (Sandbox Code Playgroud)

另外一个选择是考虑使用一个本质上这样做的JS框架:

// jQuery
$(document).ready( function () {
  SomeFunction();
});
Run Code Online (Sandbox Code Playgroud)


Sar*_*raz 36

function yourfunction() { /* do stuff on page load */ }

window.onload = yourfunction;
Run Code Online (Sandbox Code Playgroud)

或者使用jQuery,如果你想:

$(function(){
   yourfunction();
});
Run Code Online (Sandbox Code Playgroud)

如果要在页面加载时调用多个函数,请查看本文以获取更多信息:

  • 这是不正确的,函数将执行并分配它返回onload的任何内容.()不应该在那里. (3认同)
  • 如果有其他函数正在侦听 onload 事件,这会将它们吹走。最好添加事件侦听器而不是直接分配事件处理程序。即使在这种情况下,您也可以将它指定为“window.onload = yourfunction”而没有函数闭包,而不是您拥有它的方式。您的方式寻求在分配时执行 yourfunction() 。 (2认同)

Ami*_*man 7

您必须在加载时调用要调用的函数(即,加载文档/页面).例如,当文档或页面加载时要加载的函数称为"yourFunction".这可以通过调用文档的load事件上的函数来完成.请参阅下面的代码了解更多详情.

请尝试以下代码:

<script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).ready(function () {
        yourFunction();
    });
    function yourFunction(){
      //some code
    }
</script>
Run Code Online (Sandbox Code Playgroud)


小智 6

这是诀窍(无处不在):

r(function(){
alert('DOM Ready!');
});
function r(f){/in/.test(document.readyState)?setTimeout('r('+f+')',9):f()}
Run Code Online (Sandbox Code Playgroud)

  • 呃。我认为这不是代码混淆竞赛。 (7认同)

小智 6

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript">
        function codeAddress() {
            alert('ok');
        }
        window.onload = codeAddress;
        </script>
    </head>
    <body>
    
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 描述你回答这只是一个代码 (4认同)
  • 我认为他的答案是清楚的,因为你可以看到脚本放在头标记中,因此允许它在正文内容之前执行..或者让我们说它预先加载它的功能或者其他什么......有时一个人会问问题,因为他不喜欢根本不知道,但是从来没有人会用勺子喂你,也不是这个社区的任何人,你必须自己多看一些东西.#especially_that_you're_a_web_developer (3认同)