2

これを書いたら

$(document).ready( function () { 
    alert("bla1");
});


$(document).ready( function () { 
    alert("bla2");
});

2 つのアラートが発生しますが、コードが

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


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

2 番目のアラートは発生しませんでした。誰かに教えてください。2 つ以上のwindow.onloadが間違っているのはなぜですか?

4

6 に答える 6

8

それに何かを割り当てます。次に、何か他のものをそれに割り当てて、以前にあったものを上書きします。

foo = 1;
foo = 2;
// foo is now "2" it is not "1" and "2"

イベント ハンドラを非破壊的に割り当てる場合は、 を使用しますaddEventListener。Old-IE をサポートするには、互換性メソッドを使用する必要があります。onこのようなメソッドは、 methodを介して jQuery に組み込まれています。

于 2012-08-31T10:09:50.087 に答える
3

そのような

 var test;
 test = 10;
 test = 20 
 alert(test); // 20

それを上書きすると、jQueryはloadイベントで異なる方法で処理します。

于 2012-08-31T10:10:52.473 に答える
3

必要な動作を実現したい場合は、関数 addEventListener を使用する必要があります。

window.addEventListener("load",function () {
    alert("bla1");
}, false);

window.addEventListener("load",function () {
    alert("bla2");
}, false);
于 2012-08-31T10:12:50.607 に答える
1

このようなことを試してください

function doOnLoad() {
        alert("hi");
        alert("bye");
}
window.onload = doOnLoad;
于 2012-08-31T10:11:58.387 に答える
1

Robert Hahn は彼のブログで優れたソリューションを紹介しています。

function makeDoubleDelegate(function1, function2) {
    return function() {
        if (function1)
            function1();
        if (function2)
            function2();
    }
}

window.onload = makeDoubleDelegate(window.onload, myNewFunction );

makeDoubleDelegate() 関数は最初の JS ファイルに配置され、いつでも呼び出すことができます。2 つの関数を引数として受け取り、それらが存在するかどうかを確認し、存在する場合は、有効な既存の関数を含む無名関数を返します。

window.onload が初めて呼び出されたとき、window.onload 自体は定義されていないため、返されるのは myNewFunction() のみを内部に持つ無名関数です。後続の window.onload 割り当てでは、window.onload が存在するため、それが保持するものはすべて新しい関数でラップされます。そして、リストが大きくなります。

于 2014-03-13T11:24:49.413 に答える