`
米奈希尔
  • 浏览: 268829 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

也谈window.onload

 
阅读更多

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

 

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 onload="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同时执行多个函数的解决办法

分享到:
评论
1 楼 837062099 2012-04-08  
window.onload = init;

相关推荐

    浅谈js图片前端预览之filereader和window.URL.createObjectURL

    浅谈js图片前端预览之filereader和window.URL.createObjectURL //preview img : filereader方式 document.getElementById('imgFile').onchange = function(e){ 5 var ele = document.getElementById('imgFile')....

    浅谈window对象的scrollBy()方法

    window.onload = function () { var bt = document.getElementById("bt"); bt.onclick = function () { resize(); } } 查看效果" id="bt"&gt; ``` 在这个例子中,当用户点击“查看效果”按钮时,`resize...

    浅谈jquery页面初始化的4种方式

    `window.onload`则是最保险的方法,确保所有内容都已加载完毕,但可能会延迟代码执行。 在实际开发中,根据项目需求和性能考虑,可以选择合适的方式进行页面初始化。例如,如果初始化代码与图片或其他资源无关,...

    ATL工程创建ActiveX控件并在IE中测试object引用的生命周期

    一种解决方案是利用`window.onunload`和`window.onload`事件,以及`window.name`属性来存储和恢复控件的状态。当页面卸载时,你可以将控件的状态保存在`window.name`中,然后在新页面加载时恢复这个状态。这样,即使...

    PPK谈javascript示例

    2. 页面加载完成后(`window.onload`事件),遍历页面上的所有textarea元素。 3. 创建一个计数器div元素(`counter`),用于显示字符数。 4. 对于每个有`maxlength`属性的textarea,创建计数器的副本并将其插入到...

    精谈iframe的作用和使用方式

    window.onload = function() { var frame = document.getElementById('editableFrame'); frame.contentDocument.designMode = 'on'; } ``` 3. **多层嵌套**:`iframe`支持多层嵌套,这意味着一个`iframe`内...

    浅谈JavaScript_DOM学习篇_图片切换小案例

    `window.onload`事件确保在页面加载完成后执行所有DOM操作和事件绑定。 通过这个案例,可以学习到如何使用JavaScript和DOM API操作页面元素,实现动态网页功能。掌握DOM操作是前端开发者必备的技能之一,对于构建...

    JavaScript基础篇——浅谈cookie

    window.onload = function() { var login = document.getElementById("login"); var del = document.getElementById("del"); var oUsername = document.getElementById("username"); // 获取已存储的用户名 ...

    浅谈CSS3动画的回调处理

    window.onload = function () { var _rect = document.querySelector('.rect'); _rect.onclick = function () { _rect.style.webkitTransform = 'translateX(300px)'; } _rect.addEventListener('...

    浅谈javascript中return语句

    window.onload = function() { var oLink = document.getElementById("theLink"); oLink.onclick = function() { return false; // 阻止默认事件和事件冒泡 } } 点击我 ``` 在上面的示例中,当用户...

    浅谈JavaScript 的执行顺序

    除非在所有代码都加载完毕后再执行,比如使用`window.onload`事件处理函数。 总的来说,JavaScript执行顺序的步骤大致如下: 1. 遇到`&lt;script&gt;`标签,暂停HTML解析。 2. 对当前代码块进行预编译,处理变量和函数...

    浅谈javascript中createElement事件

    在给定的文件内容中,示例代码通过`window.onload`事件确保在页面加载完成后执行脚本。这是因为在DOM完全加载之前执行脚本可能会因为找不到元素而执行失败。接下来,使用`document.createElement` 创建了两个`input`...

    浅谈遇到的几个浏览器兼容性问题

    接下来,作者提到了`window.onload`事件在某些情况下无法准确检测到视频资源是否加载完成的问题。为了解决这一问题,作者建议使用其他方法来检测视频是否加载完成,比如通过检查视频元素的`readyState`属性来判断。...

    深入理解JS的事件绑定、事件流模型

    - 事件因子:当事件触发时,会传递一个事件对象,包含事件的详细信息,如`e`或`window.event` 关于键盘事件的注意事项: - 执行顺序:`keydown` -&gt; `keypress` -&gt; `keyup` - `keypress`仅能捕获数字、字母和...

    浅谈JavaScript中的对象及Promise对象的实现

    window对象 常用的属性和方法介绍 location  包含页面的URL,如果改变这个属性,浏览器会访问新的URL status  包含将在浏览器状态去显示的一个串。一般在浏览器左下角 onload:  包含了需要在页面完全加载后调用...

Global site tag (gtag.js) - Google Analytics