man*_*j82 46 javascript anti-patterns javascript-events
是否可以使用退出按钮[X]阻止用户关闭窗口?我实际上在页面中提供了一个关闭按钮,供用户关闭窗口.基本上我试图做的是强制用户填写表单并提交它.我不希望他们关闭窗口,直到他们提交它.
伙计们,我非常感谢你的评论,我不想在任何商业网站上托管.内部事情,我们实际上让所有员工参与我们设计的这项调查....我知道它不是正确的方式,但我想知道我们在这里遇到的问题是否有解决办法......
Poo*_*ool 95
它不会强迫某人留下,但它会提示他们是否真的要离开,这可能是您可以管理的最佳跨浏览器解决方案.(如果您尝试离开中间答案,则与此网站类似.)
<script language="JavaScript">
window.onbeforeunload = confirmExit;
function confirmExit() {
return "You have attempted to leave this page. Are you sure?";
}
</script>
Run Code Online (Sandbox Code Playgroud)
编辑:大多数浏览器不再允许自定义消息onbeforeunload
.
请参阅2016年2月18日的此错误报告.
onbeforeunload对话框用于现代Web上的两件事:
1.防止用户无意中丢失数据.
2.欺骗用户.为了限制他们使用后者而不停止前者,我们将不显示网页提供的字符串.相反,我们将使用通用字符串.
Firefox已经做到了[...]
当用户点击ALT + F4或从任务管理器关闭它时,您将做什么
如果他们没有在cookie或数据库中完成它,你为什么不跟踪他们下次访问时只是带回同一个屏幕...:BTW ..你还没有完成这个表格填写... "
当然,如果你在互联网泡沫破灭之前,你会记得色情风暴,如果你关闭1个窗口15其他人会打开..所以有的代码会检测到一个窗口关闭,但如果你点击ALT + F4两次它会关闭孩子和父母(如果是弹出窗口)
如果您不想为所有事件显示弹出窗口,则可以添加条件
window.onbeforeunload = confirmExit;
function confirmExit() {
if (isAnyTaskInProgress) {
return "Some task is in progress. Are you sure, you want to close?";
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说很好
那个怎么样?
function internalHandler(e) {
e.preventDefault(); // required in some browsers
e.returnValue = ""; // required in some browsers
return "Custom message to show to the user"; // only works in old browsers
}
if (window.addEventListener) {
window.addEventListener('beforeunload', internalHandler, true);
} else if (window.attachEvent) {
window.attachEvent('onbeforeunload', internalHandler);
}
Run Code Online (Sandbox Code Playgroud)
这将弹出一个对话框,询问用户是否真的想关闭或留下,并带有一条消息。
var message = "You have not filled out the form.";
window.onbeforeunload = function(event) {
var e = e || window.event;
if (e) {
e.returnValue = message;
}
return message;
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以在提交表单或其他内容之前取消设置它
window.onbeforeunload = null;
Run Code Online (Sandbox Code Playgroud)
请记住,这非常烦人。如果您试图强迫您的用户填写他们不想填写的表单,那么您将失败:他们会找到关闭窗口的方法,并且永远不会回到您的卑鄙网站。