3

我已阅读问题window.onload 与 <body onload=""/>的答案。在那个问答中,许多人声称window.onload并且body.onload是相同的。这不是我所经历的。

考虑两个测试页面:

<!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

Crescent 是正确的,通过使用:

window.onload = resetMenu();

您正在使 window.onload 等于 resetMenu 函数的返回值,而不是提供应该调用 onload (和卸载)的函数。所以你应该使用:

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

但是为什么页面卸载时需要重置菜单呢?

注意:您也可以使用匿名函数作为 onload 处理程序 :)

于 2009-12-11T20:33:04.590 回答