3

window.onload と <body onload=""/>の質問に対する回答を読みました。window.onloadその Q&A では、多くの人がとbody.onloadが同一であると主張しています。これは私が経験したことではありません。

次の 2 つのテスト ページについて考えてみましょう。

<!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>
    <title>test 1</title>

   <script type="text/javascript">

   var initialSelectedIndex = 0;

   function resetMenu()
   {
      document.getElementById("fruitMenu").selectedIndex = initialSelectedIndex;
   }

   </script>

</head>
<body onload="resetMenu();" onunload="resetMenu();">
   <br />
   <select id="fruitMenu">
      <option value ="apple">apple</option>
      <option value ="banana">banana</option>
      <option value ="strawberry">strawberry</option>
      <option value ="grape">grape</option>
   </select>

   <p><a href="http://www.google.com.au">google</a>
   </p>

</body>
</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>
    <title>test 2</title>

   <script type="text/javascript">

   var initialSelectedIndex = 0;

   function resetMenu()
   {
      document.getElementById("fruitMenu").selectedIndex = initialSelectedIndex;
   }

   window.onload = resetMenu();
   window.onunload = resetMenu();

   </script>

</head>
<body>
   <br />
   <select id="fruitMenu">
      <option value ="apple">apple</option>
      <option value ="banana">banana</option>
      <option value ="strawberry">strawberry</option>
      <option value ="grape">grape</option>
   </select>

   <p><a href="http://www.google.com.au">google</a>
   </p>

</body>
</html>

「テスト 1」ページで、ドロップダウン メニューから項目を選択し、リンクをクリックしてページから移動し、戻るボタンを押すと、メニューは初期状態にリセットされます。ただし、これは「テスト 2」ページでは発生しません。なんで?

これはテストですが、私の目標は、RegisterStartupScript または RegisterClientScriptBlock を使用して aspx ページで同様のことを行うことなので、本体の onload/onunload を使用せずに window.onload/onunload を使用して「テスト 1」の動作を再現できるようにしたいと考えています。 .

4

1 に答える 1

2

次を使用して、クレセントは正しいです。

window.onload = resetMenu();

onload(およびunload)と呼ばれる関数を提供するのではなく、window.onloadをresetMenu関数の戻り値と等しくしています。したがって、次を使用する必要があります。

window.onload = resetMenu;
window.onunload = resetMenu;

しかし、ページがアンロードされたときにメニューをリセットする必要があるのはなぜでしょうか?

注: onload ハンドラーとして無名関数を使用することもできます :)

于 2009-12-11T20:33:04.590 に答える