zoukankan      html  css  js  c++  java
  • javascript window.onload 加载多个函数的方法

    用法如下:

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


    或者如下:

    window.onload=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;
        if (typeof window.onload != 'function') {
            window.onload = func;
        } else {
            window.onload = function() {
                oldonload();
                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加载多个函数写法:

    理解:如果(typeof window.onload != 'function')也就是说window.onload还没有被赋值,就直接把它赋值为func。否则,说明有程序先对其赋值了,那么在页面加载完成之后,应该先执行现有函数再执行自己的新的func。这里现有函数是oldonload()有问题,因为没有赋值。应该是:
    else {
    var oldonload = window.onload;
    window.onload=function(){oldonload();func();}
    }
    这里先用oldonload变量把现有的window.onload存下来。然后【应该先执行现有函数再执行自己的新的func】是两件事。为了按顺序完成两件事,所以这里又多写了一个函数,函数内容是{oldonload();func();}然后这个函数被赋值给了window.onload。


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

  • 相关阅读:
    ZCMU 暑期练习赛【识别】
    P1024 一元三次方程求解
    P1059 明明的随机数
    P2670 扫雷游戏
    ESP32手动搭建Arduino环境
    基于arduino的气象站
    序列归并
    结构体数组排序:1004 成绩排名 【pta】
    C语言:大数求和
    centos7 安装mongodb replica set 集群搭建
  • 原文地址:https://www.cnblogs.com/jsStudyjj/p/5012269.html
Copyright © 2011-2022 走看看