【发布时间】:2012-02-09 22:25:58
【问题描述】:
当用户离开页面时,我需要询问他是否想在离开前执行特定操作。
<script type="text/javascript">
$(document).ready(function() {
window.onbeforeunload = askConfirm;
});
function askConfirm() {
var addFriend = confirm("Would you like to ping?");
if (addFriend) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","http://example.com?ping=1234",true);
xmlhttp.send();
}
return null;
}
根据最后一个return 语句的值(""、null、true、false,或者根本没有return 语句),我可以有以下两种情况之一:
1) 用户收到“您要 ping 吗?”确认(良好),发送 ping(良好),用户会看到“此页面要求您确认是否要离开”弹出窗口(错误)。
-或-
2) 用户收到“您要 ping 吗?”确认(良好),ping未发送(错误),用户未看到“此页面要求您确认您要离开”弹出窗口(好)。
如何在发送 AJAX ping 的同时抑制“此页面要求您确认是否要离开”弹出窗口?
编辑:听起来很荒谬,我为这个问题找到的“解决方法”是alert() 在xmlhttp.send() 声明之后。唯一干净的方法是提醒用户他的 ping 已发送。如果未来的 StackOverflowers 找到更好的解决方案,我很想知道。
谢谢。
【问题讨论】:
-
返回
true而不是null? -
@MarcB,我认为这是问题中的场景 2。也许 ping 被“优化”了?
-
@bzim:关于“优化掉”你可能是对的。我可以让某些东西“依赖”它吗?
-
@dotancohen,回复 cmets 时使用昵称自动补全。 :)
-
@bzlm:当我按下制表符时,
Add Comment按钮获得焦点,然后我必须按 Shift-制表符返回。我不妨把整件事都打出来。是否仅在使用自动完成功能时才发送通知?一个人可以自动完成并保持专注于文本区域吗?
标签: javascript ajax onbeforeunload