我刚开始学习JavaScript,有些不理解事件何时触发。这是情况:我正在编写一个ASP.Net应用程序,在我的后台代码中,在Page_Load()中有一些代码。我需要这段代码先执行完毕,然后再执行我的JavaScript代码。
是否存在某个事件或其他东西可以确保按照此顺序执行代码?
我刚开始学习JavaScript,有些不理解事件何时触发。这是情况:我正在编写一个ASP.Net应用程序,在我的后台代码中,在Page_Load()中有一些代码。我需要这段代码先执行完毕,然后再执行我的JavaScript代码。
是否存在某个事件或其他东西可以确保按照此顺序执行代码?
<body onload="yourFunction()">
function yourFunction() {
}
或者,您也可以将一些脚本放置在body的最后面。这里的任何脚本都会在body处理完后执行。您可以做一些像这样的事情:
var divElement = document.getElementById("divId");
确保它不会返回null。
编辑
我没有看到您的问题中标记了jQuery,但是,如果您正使用它,则也可以执行此操作:
$(document).ready(function() {
//dom is ready
});
$(function() {
//dom is ready
});
<!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>
$(window).ready(function()
{
//Your code goes here
});
b.
$(document).ready(function()
{
//Your code goes here
});
c.
window.onload = function()
{
//Your code goes here
}
我认为您可能对ASP页面的生命周期有些困惑。
服务器端(VB / C#)代码中的所有事件都将在每次构建页面时触发(除了用户触发的事件)。因此,Init、Load、PreRender、Render、Unload等等...只有在页面构建完成后,它才会被发送到浏览器。一旦浏览器掌握了它,然后您的JavaScript才能执行。
Adam建议的方法是其中一种可能的方法。
不用担心,服务器端脚本总是在客户端脚本之前执行。
为了确保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>
body onload='foo()'
是少数(唯一?)通常容忍 DOM 0 级处理程序的地方。 - Adam Rackis