卸载/退出时确认对话框除非按下后退按钮?
我有一些简单的代码来显示一个确认对话框,当用户试图离开我的方式:卸载/退出时确认对话框除非按下后退按钮?
window.onbeforeunload = askConfirm;
function askConfirm(){
return "Your answers will be lost.";
}
但这是一个多页的形式和他们经常压回改变前一个页面上的一些价值观。
但是当他们做这个对话框仍然出现。
有没有办法解决这个问题?
我没有看到专门检测用户是否按下“返回”或任何其他浏览器按钮的方式。这超出了网站的范围。
只有一种解决方法:只在全局标志设置为“true”时显示确认对话框。
if (ask_when_exiting == true)
return "Your answers will be lost.";
你将不得不将变量设置为true?
在您需要的确认,弹出的每一个环节的onclick事件。您应该能够使用JQuery或其他JS框架(像$$('a').each()....
之类的东西)将此事件批量应用于页面上的每个链接。
但是,这将禁用重新加载页面的确认或任何其他未使用页面上的控件触发的事件,如键入另一个URL或关闭浏览器。
当然(正如你所暗示的),这对于1)用户输入新地址并离开你的网站,或者2)关闭他们的浏览器的用户不起作用。 – 2009-12-10 18:28:54
是的。将您的示例添加到答案中。 – 2009-12-10 18:29:48
不幸的是我不会回答你的问题,而是一种解决方案。这里唯一可能的解决方案是imv,确保用户单击后退按钮并不会实际上通过存储来自所有页面的表单答案来创建问题。在PHP的情况下,我会将它们存储在会话中($_SESSION
)。您必须认识到用户比浏览器中的任何其他UI元素更多地使用后退按钮。如果您的表单确实需要跨越多个页面,那么您需要确保他们输入的数据在所有这些页面中保持不变。我实际上会在你自己的界面中提供一个导航。在视觉上提供清晰的顺序过程,并尽可能在此过程中实现即时导航。
不,没有办法做到这一点。 – SLaks 2009-12-10 18:26:21
@SLaks:你为什么不把它作为回答而不是评论?我无法理解用评论回答问题。如果它只是说出你的评论所说的话,我甚至会给你答案+1。 – 2009-12-10 19:05:16