搜索

首页  >  问答  >  正文

javascript - 页面引入的所有的js文件,每个js文件都有window.onload偶尔会某个js文件没有执行

1.在A页面引入a.js和b.js;其中a.js和b.js都用了window.onload没有问题;
但是我在B页面也引入a.js和c.js,偶尔a.js就跟完全没有执行一样
但是我直接将a.js中的window.onload中的东西放入B页面的c.js的onload中,又正确执行了,不晓得是怎么回事??

習慣沉默習慣沉默2725 天前912

全部回复(5)我来回复

  • phpcn_u1582

    phpcn_u15822017-06-26 10:57:06

    window.onload只有一次,所以会出现多个js同时使用它而冲突的问题。
    解决办法

    1.用jQuery使用ready()方法替换onload
    2.在window.onload中一次加载所有js文件,例:window.onload=function(){function(a);function(b);} 

    回复
    0
  • 黄舟

    黄舟2017-06-26 10:57:06

    我试了一下,window可以绑定多次,但是最后一次才会生效,你可以对照看下我下面的2个例子来理解你出现的情况。

        //方式1:
        window.onload=function () {
            console.log("1");
        }
        window.onload=function () {
            console.log("2");
        }
    //    输出2
    //    -------------------------------分割线
    //    方式2:
        function fn1() {
            console.log("1");
        }
        function fn2() {
            console.log("2");
        }
        addEventLoad(fn1);
        addEventLoad(fn2);
        //输出1  2
        function addEventLoad(fn){
            var oldFn = window.onload;
            if(typeof window.onload != 'function'){
                window.onload = fn;
            }else{
                window.onload = function(){
                    oldFn();
                    fn();
                }
            }
        }

    回复
    0
  • 大家讲道理

    大家讲道理2017-06-26 10:57:06

    • 通过window.onload = function() { ... }方法设置的事件,后面的window.onload值会覆盖掉前面的,所以,只有最后一次生效。(这个和调用a = 1; a = 2; a =3;是一个道理)

    • 如果需要对windowonload事件进行多次绑定,建议使用addEventListener

    window.addEventListener('load', function() { ... }, false);
    • 注意,ID中使用attachEvent而非addEventListener

    window.attachEvent('onload', function() { ... });
    • 另外注意,addEventListener中用的是'load',而attachEvent中用的是'onload'

    回复
    0
  • 世界只因有你

    世界只因有你2017-06-26 10:57:06

    window.onload()方法只能绑定一次的,多次绑定只有最后一次生效

    回复
    0
  • 代言

    代言2017-06-26 10:57:06

    window.onload只会调用最后一个的,之前的都会被覆盖掉。

    回复
    0
  • 取消回复