在页面加载完成后执行Javascript

4

我刚开始学习JavaScript,有些不理解事件何时触发。这是情况:我正在编写一个ASP.Net应用程序,在我的后台代码中,在Page_Load()中有一些代码。我需要这段代码先执行完毕,然后再执行我的JavaScript代码。

是否存在某个事件或其他东西可以确保按照此顺序执行代码?

5个回答

11
最简单的方法是将您的函数调用添加到body的onload事件中。
<body onload="yourFunction()">

function yourFunction() {
}

或者,您也可以将一些脚本放置在body的最后面。这里的任何脚本都会在body处理完后执行。您可以做一些像这样的事情:

var divElement = document.getElementById("divId");

确保它不会返回null。

编辑

我没有看到您的问题中标记了jQuery,但是,如果您正使用它,则也可以执行此操作:

$(document).ready(function() {
    //dom is ready
});

更简单地说:
$(function() {
    //dom is ready
});

1
我通常不鼓励这样使用内联 JavaScript。实际上,我认为最简单的选项是在 body 中包含脚本。如果您正在使用 jQuery,那么以这种方式使用它确实有意义,但我肯定不会为了这个功能而将 jQuery 包含在我的项目中。您还声明了一个全局函数,这通常是个坏主意。 - Matt Esch
@me232 - 我曾认为 body onload='foo()' 是少数(唯一?)通常容忍 DOM 0 级处理程序的地方。 - Adam Rackis
@AdamRackis 这个用例如何赢得我的宽恕? - Matt Esch
@me232 - 你能原谅我吗?好的。我只是在说使用body onload='foo()'是一种常见的习惯用法,通常不会被严厉地批评。而且我也提到了脚本可以添加到body的末尾。我尽可能给出了多种选择。 - Adam Rackis
@AdamRackis 我只是想说,既然你提出了这么多好的替代方案,我不知道为什么我们要接受像这样的内联JavaScript,即使其他人认为它可以接受。实际上并没有必要这样做。我认为也许你有一个好的理由让我对这种用例放松一些。我猜测我的最后一条评论可能被误解了 :) - Matt Esch
@me232 - 哦,好的,说得对。我想,考虑到问题本身,我假设这是一个相当琐碎的情况,使用“快速而肮脏”的解决方案可能是可以接受的,甚至更可取。但你说得对,对于任何非琐碎的情况,你可能不应该使用dom level-0。 - Adam Rackis

4
标签中包含的脚本会在加载完成后按顺序执行。这可用作跨浏览器解决方案,以确保脚本在页面加载后加载。
<!DOCTYPE html>
<html>
<head>
    <!-- scripts loaded in unknown order in some browsers -->
    <script type="text/javascript" src="headscript.js"></script>
</head>
<body>

    <!-- scripts included on body execute in order when the DOM is ready -->
    <script type="text/javascript">
        (function () {
            // do what you want here without trashing global scope
            // you should probably include this as an external script
        }());
    </script>
</body>   
</html>

3
是的,有几种方法可供选择:
a.
$(window).ready(function() 
{
   //Your code goes here
});

b.

$(document).ready(function() 
{
   //Your code goes here
});

c.

window.onload = function() 
 {
  //Your code goes here
 }

1

我认为您可能对ASP页面的生命周期有些困惑。

服务器端(VB / C#)代码中的所有事件都将在每次构建页面时触发(除了用户触发的事件)。因此,Init、Load、PreRender、Render、Unload等等...只有在页面构建完成后,它才会被发送到浏览器。一旦浏览器掌握了它,然后您的JavaScript才能执行。

Adam建议的方法是其中一种可能的方法。


1

不用担心,服务器端脚本总是在客户端脚本之前执行。

为了确保Javascript在页面上的所有内容(DOMContent-wise)都创建完成后执行,您有几个选项。 您可以将脚本添加到 标签的底部。实际上,这是一个好习惯,因为页面底部的脚本会使页面加载速度更快,而感知性能非常重要。

正如Adam所说,您还可以使用事件处理程序,例如window.onload = function(){}或window.addEventListener("load", function(){}, true)。 另一种选择是使用“DOMContentLoaded”而不是“load”,它将在整个html文件的文本部分加载完成后执行(而不是等待所有图像等加载完成)。但是,如果您将脚本放在页面底部,则这将是不必要的。

以下是一个示例html文件。请注意,样式表定义在顶部,而脚本定义在底部。

<!DOCTYPE html>
<html>
<head>
<title></title>
<link type="text/css" href="style.css" rel="stylesheet"/>
</head>
<body>
<script type="text/Javascript" src="script.js"></script>
</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接