关于javascript:window.onload / onunload与body.onload / onunload之间的区别

Differences between window.onload/onunload and body.onload/onunload

我已经阅读了问题window.onload vs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!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>
    test 1

   <script type="text/javascript">

   var initialSelectedIndex = 0;

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

   

</head>
<body onloadx="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>
google
   
</p>

</body>
</html>

和:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!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>
    test 2

   <script type="text/javascript">

   var initialSelectedIndex = 0;

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

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

   

</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>
google
   
</p>

</body>
</html>

在"测试1"页面上,如果您从下拉菜单中选择一个项目,然后单击链接以离开该页面,然后单击"后退"按钮,则菜单将重置为其初始状态。 不过,"测试2"页面不会发生这种情况。 为什么?

虽然这是一个测试,但我的目标是使用RegisterStartupScript或RegisterClientScriptBlock在aspx页面上执行类似的操作,因此我希望能够不使用主体onload / onunload但使用window.onload / onunload来重新创建"测试1"的行为。 。


通过使用以下命令,月牙是正确的:

1
window.onload = resetMenu();

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

1
2
window.onload = resetMenu;
window.onunload = resetMenu;

但是,为什么在页面卸载后需要重置菜单?

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