也谈window.onload

本文通过三个不同实现方式的示例,详细解析了网页中onload事件的工作原理及常见使用误区,帮助读者理解如何正确设置和触发onload事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看如下三段代码,你觉得运行结果会是什么呢?

 

onload1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>onload test1</title>
<script type="text/javascript">
	function init() {
		try {
			text = document.createTextNode("Hello world 2222");
			document.body.appendChild(text);
		} catch (e) {
			alert("Error");
		}
	}
	window.onload = init();
</script>
</head>
<body>
Hello world 1111
</body>
</html>

 

onload2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>onload test2</title>
<script type="text/javascript">
	function init() {
		text = document.createTextNode("Hello world 2222");
		document.body.appendChild(text);
	}
	window.onload = function() {
		init();
	};
</script>
</head>
<body>
	Hello world 1111
	<br>
</body>
</html>

 

onload3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>onload test3</title>
<script type="text/javascript">
	function init() {
		text = document.createTextNode("Hello world 2222");
		document.body.appendChild(text);
	}
</script>
</head>
<body οnlοad="init()">
	Hello world 1111
	<br>
</body>
</html>

 

你是否认为三段代码执行的结果是相同的呢?即页面显示的是:

Hello world 1111
Hello world 2222

 

实际的结果是:

对于onload1.jsp,会 跳出"Error"提示框,然后 页面显示Hello world 1111;

而对于onload2.jsp和onload3.jsp则会出现如下的运行结果:

Hello world 1111
Hello world 2222

 

这是什么原因呢?

  对于onload2.jsp和onload3.jsp,这是onload的常见用法(两种实际效果是一样的),此时,onload脚本会在页面加载完成后执行,否则,结果就应该是:

Hello world 2222

Hello world 1111

 

  而对于onload1.jsp,区别于后两种的地方在于,”window.onload = init();”这行代码中的init后面跟着一对括号,导致onload脚本在页面(也许说文档更准确)未加载完成前就开始执行,而且先于body元素执行,这样当执行init函数时,异常就不可避免地发生了,因为此时就没有body元素。

 

补充:

window.onload同时执行多个函数的解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值