onload的具体使用

用法

window.onload: 页面加载完成

一,window.onload的用法:

因为页面中的代码一般情况下按照,从上到下,从左到右的顺序执行。

所以当js代码需要获取页面中的元素时,如果script标签在元素的前面,需要加window.onload;如果script放在了元素后面,就不需要加 window.onload。

例一:点击按钮,实现div变大的效果(宽,高,增加200像素)。

 

<head>

    <meta charset="UTF-8">

    <title>Document</title>

 

    <style type="text/css">

        #box{

            width: 200px;

            height: 200px;

            background-color: red;

        }

    </style>

    <script type="text/javascript">          

        document.getElementById("btn").οnclick=function(){

            document.getElementById("box").style.width="400px";

            document.getElementById("box").style.height="400px";

        }

    </script>

</head>

<body>

    <input type="button" name="btn" id="btn" value="确认">

    <div id="box"></div>

</body>

注:例一在点击确认按钮时,页面上div并没有任何变化,原因是,由于程序是从上往下开始执行,运行到document.getElementById(“btn”)时,并没有发现“btn”这个元素,所以就会提示错误信息(null),此时的程序运行时也就没有任何JavaScript效果。

 

二,问题解决

把JavaScript中要执行的程序放在window.οnlοad=function(){}中,如例二:

例二:正确的代码

 

<head>

    <meta charset="UTF-8">

    <title>Document</title>

 

    <style type="text/css">

        #box{

            width: 200px;

            height: 200px;

            background-color: red;

        }

    </style>

    <script type="text/javascript">

        window.οnlοad=function(){

            document.getElementById("btn").οnclick=function(){

            document.getElementById("box").style.width="400px";

            document.getElementById("box").style.height="400px";

        }

        }

    </script>

</head>

<body>

    <input type="button" name="btn" id="btn" value="确认">

    <div id="box"></div>

</body>

jQuery 入口函数和onload的区别

jQuery 入口函数:

$(document).ready(function(){

    // 执行代码

});

或者

$(function(){

    // 执行代码

});

JavaScript 入口函数:

window.onload = function () {

    // 执行代码

}

jQuery 入口函数与 JavaScript 入口函数的区别:

  •  jQuery 的入口函数是在 html 所有标签(DOM)都加载之后,就会去执行。
  •  JavaScript window.onload 事件是等到所有内容,包括外部图片之类的文件加载完后,才会执行。

 

加载多个方法

平时做项目 经常需要使用window.onload

用法如下:

function func(){alert("this is window onload event!");return;} 

window.οnlοad=func;

或者如下: 

window.οnlοad=function(){alert("this is window onload event!");return;}

window.onload 不能同时加载多个函数。

比如:

function t(){
alert("t")
}
function b(){
alert("b")
}
window.onload =t ;
window.onload =b ;

后面会把前面的覆盖,上面代码只会输出 b

此时可用如下方法解决:

window.onload =function() { t();  b(); }

另一种解决方法如下:

 

 

 function addLoadEvent(func) {
  
var oldonload = window.onload;//得到上一个onload事件的函数
  if (typeof window.onload != 'function') {//判断类型是否为'function',注意typeof返回的是字符串
    window.onload = func;
  } 
else {  
    window.onload = 
function() {
      oldonload();
//调用之前覆盖的onload事件的函数---->由于我对js了解不多,这里我暂时理解为通过覆盖onload事件的函数来实现加载多个函数
      func();//调用当前事件函数
    }
  }
}


//(完整示例)使用如下:

function t(){
alert("t")
}

function b(){
alert("b")
}

function c(){
alert("c")
}
 
function addLoadEvent(func) {
  
var oldonload = window.onload;
  
if (typeof window.onload != 'function') {
    window.onload = func;
  } 
else {  
    window.onload = 
function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(t);
addLoadEvent(b);
addLoadEvent(c);

//等价于  window.onload =function() { t();  b(); c() ;}

 

  

个人以为直接使用隐式函数(如:window.onload =function() { t();  b(); c() ;})更快捷,当然使用 addLoadEvent professional,各取所好吧!

 

JS window.onload追加函数:

 

 

 

<script>
if(window.attachEvent)//IE:如果浏览器中存在window.attachEvent函数则使用window.attachEvent函数,判断是否是IE还可以使用:if (document.all){//..}
window.attachEvent("onload",function() {alert("add method");});
else  //FireFox
window.addEventListener("load",function() {alert("add method");},true);
</script>

  

运行,jsalert弹出消息,问题解决。

============相关资料================

attachEvent   将指定函数绑定到事件,以便每当该事件在对象上触发时都调用该函数。

 Internet Explorer 5.0 开始提供了一个 attachEvent 方法,使用这个方法,就可以给一个事件指派多个处理过程了。attachEvent 对于目前的 Opera 也适用。但是 Mozilla/Firefox 并不支持这个方法。但是它支持另一个 addEventListener 方法,这个方法跟 attachEvent 差不多,也是用来给一个事件指派多个处理过程的。但是它们指派的事件有些区别,在 attachEvent 方法中,事件是以 “on” 开头的,而在 addEventListener 中,事件没有开头的 “on”,另外 addEventListener 还有第三个参数,一般这个参数指定为 false 就可以了。

 

 

  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值