window.onload = f;
function f() {
alert("页面加载完毕");
}
<body onload="f()">
<script>
function f() {
alert("页面加载完毕");
}
</script>
<body onload="f()">
<script>
window.onload = f;
function f() {
alert("页面加载完毕");
}
</script>
</body>
原来 JavaScript 解释器在编译时,如果发现同时使用两种方法定义 onload 事件,会使用 window 对象注册的事件处理函数覆盖掉 body 元素定义的页面初始化事件属性。
<body onload="f1()">
<script>
window.onload = f2;
function f1 () {
alert('<body onload="f1()">');
}
function f2 () {
alert('window.onload = f2;');
}
</script>
</body>
在实际开发中,onload 事件经常需要调用附带参数的函数,但是 onload 事件不能够直接调用函数,要解决这个问题,有以下两种方法。
<body onload="f('Hi')">
<script>
function f (a) {
alert(a);
}
</script>
</body>
window.onload = function () { //事件处理函数
f("Hi"); //调用函数
}
functioin f(a) { //被处理函数
alert(a);
}
也可以采用闭包函数形式,这样在注册事件时,虽然调用的是函数,但是其返回值依然是一个函数,不会引发语法错误。
window.onload = f("Hi");
function f(a) {
return function () {
alert(a);
}
}
通过这种方法,可以实现在 onload 事件上绑定更多的响应回调函数。
window.onload = function () {
f1(); //绑定响应函数1
f2(); //绑定响应函数2
}
function f1() {
alert("f1()");
}
function f2() {
alert("f2()");
}
但是,如果分别绑定 onload 事件处理函数,则会相互覆盖,最终只能够有一个绑定响应函数被调用。
window.onload = f1();
function f1(){
alert("f1()");
}
function f2() {
alert("f2()");
}
也可以通过事件注册的方式来实现。
if (window.addEventListener) { //兼容DOM标准
window.addEventListener ("load", f1, false); //为load添加事件处理函数
window.addEventListener ("load", f2,false); //为load添加事件处理函数
} else { 、、兼容IE事件模型
window.attachEvent ("onload", f1);
window.attachEvent ("onload", f2);
}
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有