我要求当用户点击浏览器的[X]按钮时,我应该给他们一条消息。
我使用JavaScript的onUnload方法完成了这项任务。
现在,即使我刷新页面,也会出现相同的消息!
为什么会如此以及如何克服?
代码在这里
<!DOCTYPE HTML PUBLIC“ - // W3C // DTD HTML 4.0 Transitional // EN”> < HTML> < HEAD> < script language =“javascript”>
功能消息()
{ 警报(“你想离开吗?”); }
< /脚本> < / HEAD>
< BODY onUnload =“Message();”> < / BODY>< / HTML>
请帮忙
答案 0 :(得分:6)
这是正确的行为:刷新页面包括卸载它然后再次加载它。
接近此类确认对话框的最佳方法是使用以下代码:
<script language="javascript" type="text/javascript">
window.onbeforeunload = function() {
return "You have unsaved changes.";
}
</script>
如果您在尚未保存或发送邮件时尝试关闭某个页面,则会在GMail上看到这种机制。尝试刷新页面时仍会触发,因此确保只有在未保存的工作时才返回错误字符串非常重要。
请注意,我们无法保证onUnload
或onBeforeUnload
事件会触发,因为无法保证您的访问者甚至会启用JavaScript,因此您不应将其用于关于未得救的工作的友好提醒。
答案 1 :(得分:2)
遗憾的是,没有javascript事件可以检测到X按钮的点击(关闭浏览器)。我们最接近的是onunload或onbeforeunload事件。并且,是的,无论用户选择离开页面的方法如何,它们都会触发。是关闭浏览器,单击链接,输入其他URL还是重新加载页面。这就是你所发现的。
不知道这是否会解决您的问题,因为我们StackOverflowers不了解您的应用,但您可以创建类似于此的kludge:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script type="text/javascript">
function Message()
{
if (reallyExiting) alert("Are you sure you want to leave?");
}
</script>
</head>
<body onload="reallyExiting=true;" onunload="return Message();">
<a href="example.html" onclick="reallyExiting=false">Not really leaving</a>
<a href="http://www.someOtherSite.com">Really leaving</a>
</body>
</html>
我知道这很粗糙,但您可以使用一些类似的变量来跟踪他们遇到或未击中的链接,视情况而定。
HTH。