首頁  >  問答  >  主體

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中,又正確執行了,不曉得是怎麼回事? ?

習慣沉默習慣沉默2695 天前889

全部回覆(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
  • 取消回覆