网页中的javaScript脚本代码往往需要在html文档加载完成后才能够去执行,否则可能导致无法获取对象的情况,为了避免这种情况的发生,可以使用以下两种方式:
- 将脚本代码放在网页的底端即在</body>之前,这样在运行脚本代码的时候,可以确保DOM已经加载完成。
- 在window.onload方法中执行操作相应的脚本
可以用下面这种方式将一个方法传给window.onload:
1 window.onload = fun1; 2 function fun1(){ 3 alert("fun1"); 4 }
假设需要执行2个方法或者更多方法,我们尝试用上面方法:
1 window.onload = fun1; 2 window.onload = fun2; 3 function fun1(){ 4 alert("fun1"); 5 } 6 function fun2(){ 7 alert("fun2"); 8 }
发现页面只弹出了“fun2”的提示框,证明window.onload方法具有覆盖性。
如何解决这个问题呢?首先定义一个带一个参数的方法,参数类型为function类型,变量保存之前onload方法,然后判断其类型,如果其类型不等于function类型,说明此时为window.onload第一次被方法赋值(window.onload初始类型为Object,被方法赋值后其类型变为function),否则重新赋值windos.onload一个匿名方法,方法体里面首先执行原onload中的代码,然后执行传入方法。
1 onLoadlistener(fun1); 2 3 onLoadlistener(fun2); 4 5 onLoadlistener(fun3); 6 7 function fun1(){ 8 alert("fun1"); 9 } 10 11 function fun2(){ 12 alert("fun2"); 13 } 14 15 function fun3(){ 16 alert("fun3"); 17 } 18 19 function onLoadlistener(func){ 20 var oldonLoad=window.onload; 21 if(typeof oldonLoad !="function") { 22 window.onload=func; 23 }else{ 24 window.onload=function(){ 25 oldonLoad(); 26 func(); 27 } 28 } 29 }
依次输出 "fun1"、"fun2"、"fun3",此方法会按照添加function的顺序执行。
时间: 2024-11-15 12:10:07