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);

我已经尝试了带有 body 标签的内联调用、window.onunload调用和侦听器调用。没有任何工作正常,我收到“感谢您的访问。很快回来!” 页面首次加载时的消息。

4

1 回答 1

2

问题是以下行:

window.onunload = goodbye();

这将window.unload事件设置为等于函数的结果goodbye(),并立即调用该goodbye()函数。将其更改为:

window.onunload = goodbye;

更详细:

您通过命名函数来调用函数,并在括号中传递零个或多个参数(例如:)goodbye()。当你调用一个函数时,它会立即被调用,如果它被用作语句的一部分(而不是整个语句),那么函数的返回值将在调用的地方使用。所以,你在说什么:

window.onunload = goodbye();

是:“获取我调用goodbye函数的结果,并将返回值分配给window.onunload变量”。调用该goodbye函数会弹出一个警报,但返回 null,因此您实际上是在说“现在弹出一个警报,然后将window.onunload变量设置为 null”。

变量(window.onunload和所有其他事件变量)期望是一个函数,所以你在这里真正想说的是,“将window.onunload函数设置为goodbye函数,所以当系统调用onunload事件时,它会调用goodbye函数”,并且为此,您将函数本身分配给变量:

window.onunload = goodbye;

然而

onunload事件可能不是您想要的。这仅在页面被卸载后触发,因此大多数 UI 组件不再可供您使用,包括alert. 尝试查看onbeforeunloadJavaScript + onbeforeunload

于 2013-01-28T09:06:35.130 回答