当发生关闭事件时,我正在使用window.onbeforeunload
弹出确认对话框,但是页面刷新时会显示确认对话框,并且不会在页面关闭时执行。
这是JavaScript代码:
<script language="JavaScript">
window.onbeforeunload = confirmWinClose();
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
</script>
我在Chrome,Firefox和Internet Explorer上尝试过它。
答案 0 :(得分:6)
问题与您的代码:
当您refresh
时,系统会调用该函数,因为on refresh the page is unloaded and then reloaded
。
在您的解决方案中,您还应注意,您没有将function
分配给window.onbeforeunload
,但是在撰写时正在分配return value of the function
window.onbeforeunload = confirmWinClose();
每当完成任务时,也可能执行该功能(基于你将其放在javascript中的位置)。对于例如
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
window.onbeforeunload = confirmWinClose();
只要加载了这个js,上面的代码就会执行confirmWinClose
函数。
(不是你的情况,因为你已经在调用后定义了函数,因此不会在加载时执行,但你应该记住这一点)
<强> SOLUTION:强>
以下解决方案适用于close
而不是你的解决方案,我尝试了这个
JS:
window.onbeforeunload = function() {
var confirmClose = confirm('Close?');
return confirmClose;
}
或
window.onbeforeunload = confirmWinClose; //note the absence of calling parantheses
function confirmWinClose() {
var confirmClose = confirm('Close?');
return confirmClose;
}
这可以按预期工作。
另请注意,您应return
明确onbeforeunload
。
即使您必须调用函数,也应该
<script>
window.onbeforeunload = function(e) {
callSomeFunction();
return null;
};
</script>
答案 1 :(得分:3)
没有完整的解决方案,但您可以拦截F5键(如果用户点击刷新浏览器按钮,则不会拦截...)
var isRefresh = false;
// with jquery
$(function() {
$(document).on("keydown", function(e) {
if (e.which === 116)
{
isRefresh = true;
}
});
});
window.onbeforeunload = function() {
if (! isRefresh)
{
return confirm ('Close ?');
}
return false;
};
答案 2 :(得分:0)
试试这个它会起作用。您正在将方法分配给onload,当事件发生时需要执行,因此需要像对象一样。请参阅链接以获得更好的解释 - var functionName = function() {} vs function functionName() {}
window.onbeforeunload = confirmWinClose;
function confirmWinClose () {
var confirmClose = confirm('Close?');
return confirmClose;
};
答案 3 :(得分:0)
既然你只想显示你的文字,那么只需要使用onbeforeunload就可以返回字符串了吗?
<script language="JavaScript">
window.onbeforeunload = confirmWinClose;
function confirmWinClose() {return "close?";}
</script>