首先看如下三段代码,你觉得运行结果会是什么呢?
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同时执行多个函数的解决办法
分享到:
相关推荐
浅谈js图片前端预览之filereader和window.URL.createObjectURL //preview img : filereader方式 document.getElementById('imgFile').onchange = function(e){ 5 var ele = document.getElementById('imgFile')....
window.onload = function () { var bt = document.getElementById("bt"); bt.onclick = function () { resize(); } } 查看效果" id="bt"> ``` 在这个例子中,当用户点击“查看效果”按钮时,`resize...
`window.onload`则是最保险的方法,确保所有内容都已加载完毕,但可能会延迟代码执行。 在实际开发中,根据项目需求和性能考虑,可以选择合适的方式进行页面初始化。例如,如果初始化代码与图片或其他资源无关,...
一种解决方案是利用`window.onunload`和`window.onload`事件,以及`window.name`属性来存储和恢复控件的状态。当页面卸载时,你可以将控件的状态保存在`window.name`中,然后在新页面加载时恢复这个状态。这样,即使...
2. 页面加载完成后(`window.onload`事件),遍历页面上的所有textarea元素。 3. 创建一个计数器div元素(`counter`),用于显示字符数。 4. 对于每个有`maxlength`属性的textarea,创建计数器的副本并将其插入到...
window.onload = function() { var frame = document.getElementById('editableFrame'); frame.contentDocument.designMode = 'on'; } ``` 3. **多层嵌套**:`iframe`支持多层嵌套,这意味着一个`iframe`内...
`window.onload`事件确保在页面加载完成后执行所有DOM操作和事件绑定。 通过这个案例,可以学习到如何使用JavaScript和DOM API操作页面元素,实现动态网页功能。掌握DOM操作是前端开发者必备的技能之一,对于构建...
window.onload = function() { var login = document.getElementById("login"); var del = document.getElementById("del"); var oUsername = document.getElementById("username"); // 获取已存储的用户名 ...
window.onload = function () { var _rect = document.querySelector('.rect'); _rect.onclick = function () { _rect.style.webkitTransform = 'translateX(300px)'; } _rect.addEventListener('...
window.onload = function() { var oLink = document.getElementById("theLink"); oLink.onclick = function() { return false; // 阻止默认事件和事件冒泡 } } 点击我 ``` 在上面的示例中,当用户...
除非在所有代码都加载完毕后再执行,比如使用`window.onload`事件处理函数。 总的来说,JavaScript执行顺序的步骤大致如下: 1. 遇到`<script>`标签,暂停HTML解析。 2. 对当前代码块进行预编译,处理变量和函数...
在给定的文件内容中,示例代码通过`window.onload`事件确保在页面加载完成后执行脚本。这是因为在DOM完全加载之前执行脚本可能会因为找不到元素而执行失败。接下来,使用`document.createElement` 创建了两个`input`...
接下来,作者提到了`window.onload`事件在某些情况下无法准确检测到视频资源是否加载完成的问题。为了解决这一问题,作者建议使用其他方法来检测视频是否加载完成,比如通过检查视频元素的`readyState`属性来判断。...
- 事件因子:当事件触发时,会传递一个事件对象,包含事件的详细信息,如`e`或`window.event` 关于键盘事件的注意事项: - 执行顺序:`keydown` -> `keypress` -> `keyup` - `keypress`仅能捕获数字、字母和...
window对象 常用的属性和方法介绍 location 包含页面的URL,如果改变这个属性,浏览器会访问新的URL status 包含将在浏览器状态去显示的一个串。一般在浏览器左下角 onload: 包含了需要在页面完全加载后调用...