0

ばかげた質問ですが、書くwindow.onload = alert('hi')とアラートが表示されます。

ただし、その存在をテストすると、次のif (window.onload) alert("exists")ようになりundefinedます。どうして?

4

4 に答える 4

7

メソッド (すぐに実行される) を呼び出し、alertその戻り値 ( undefined) を に代入していonloadます。

関数を割り当てるonload場合は、古い関数呼び出しの戻り値ではなく、実際の関数を割り当てる必要があります。

例えば:

onload = function () { 
    alert('hi');
};

また

function createHiAlertFunction() {
    return function () {
        alert('hi');
    }
}
onload = createHiAlertFunction();

ただし、一般的に言えば、イベント ハンドラー プロパティに何かを割り当てることは避け、代わりにイベント バインディング メソッドを使用する必要があります。そうすれば、複数の関数を呼び出す必要がある場合でも、物事をジャグリングする必要はありません。

window.addEventListener('load', function () {
    alert('hi');
});​​​

これは旧式の IE ではサポートされていないことに注意してください。そのため、古い独自の Microsoft 方式のサポートを含む抽象化レイヤーを提供する多くのライブラリ (YUI や jQuery など) のいずれかを使用することをお勧めします。

于 2012-05-28T14:05:59.040 に答える
1

window.onloadイベントを発生させます。デフォルトでは、値はありません。その値は、すべての準備が整ったときに何かを行う必要があるときに、ユーザーによって設定されます。値を設定しなかった場合は、undefined

于 2012-05-28T14:06:42.813 に答える
0

次のことを試してください。

if(typeof window.onload !== "undefined") alert("exists!")

これは、オブジェクトに onload プロパティがあるかどうかを明示的にチェックしwindowます。

編集:

表示されているのundefinedは、アラート関数の戻り値です。

于 2012-05-28T14:34:27.260 に答える
-1

そのスクリプトはどこで起動しますか? window.onload が false を返す場合、ページが完全にロードされていないことを意味します。

于 2012-05-28T14:06:37.710 に答える