0

onunloadイベントテストスクリプトに問題があります。ウィンドウでのみ起動する必要がありますonunload が、負荷がかかると起動します。なぜですか。何かがおかしいのですが、それが何なのかわかりません。助けてください

これがhtmlコードです

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
function hello(){alert("welcome to my page");}
</script>
<script type="application/javascript" src="script.js"></script>
</head>
<body onload="hello()" >
</body>
</html>

これがスクリプトコードです

window.onunload = goodbye();
function goodbye(){
alert("Thank you for visiting.come back soon!");
}
//window.addEventListener('unload',goodbye(),false);

window.onunloadbodyタグを使用したインライン呼び出し、呼び出し、リスナー呼び出しを試しました。何も正しく動作せず、「訪問していただきありがとうございます。すぐに戻ってきてください!」というメッセージが表示されます。ページが最初に読み込まれたときのメッセージ。

4

1 に答える 1

2

問題は次の行です。

window.onunload = goodbye();

これにより、window.unloadイベントが関数の結果と等しくなり、関数がすぐにgoodbye()呼び出されます。goodbye()これを次のように変更します。

window.onunload = goodbye;

さらに詳細に:

関数に名前を付け、0個以上のパラメーターを角かっこで囲んで渡すことで関数を呼び出します(例:) goodbye()。関数を呼び出すとすぐに呼び出され、(ステートメント全体ではなく)ステートメントの一部として使用される場合は、呼び出しが行われた場所で関数の戻り値が使用されます。だから、あなたが行で言っていること:

window.onunload = goodbye();

「関数を呼び出した結果を取得しgoodbye、戻り値をwindow.onunload変数に割り当てます」です。関数を呼び出すとgoodbyeアラートがポップアップしますが、nullが返されるため、実際には、「今すぐアラートをポップアップして、window.onunload変数をnullに設定してください」と言っています。

変数(および他のwindow.onunloadすべてのイベント変数)は関数であると想定しているため、ここで実際に言いたいのは、「window.onunload関数を関数に設定してgoodbye、システムがonunloadイベントを呼び出すときにgoodbye関数を呼び出すようにする」ということです。これを行うには、関数自体を変数に割り当てます。

window.onunload = goodbye;

でも

onunloadイベントはおそらくあなたが探しているものではありません。これは、ページがアンロードされた後にのみ発生するため、を含むほとんどのUIコンポーネントは使用できなくなりますalertonbeforeunload代わりに調べてみてください( JavaScript + onbeforeunload

于 2013-01-28T09:06:35.130 に答える