我希望在刷新页面时阻止调用函数confirmExit()
。有可能吗?
<script language="JavaScript">
window.onbeforeunload = confirmExit;
function confirmExit()
{
$.post("test.php");
}
</script>
答案 0 :(得分:14)
你做不到。页面刷新就像导航和卸载DOM一样,因此将始终调用onbeforeunload
事件。
答案 1 :(得分:4)
对于您正在寻找的内容,控制刷新网页的最佳方法是使用onKeyDown函数。不幸的是,直接从浏览器中按下刷新按钮将再次加载DOM,因此从技术上讲,无法阻止此操作的刷新。
遇到同样的问题,我找到了这个网页http://asquare.net/javascript/tests/KeyCode.html,您可以在其中验证浏览器对键盘事件的响应。在这里你可以开始弄清楚为什么onKeyDown是最好的选择。 Chrome不会对onKeyPress功能做出反应。
您只需要一个变量来控制刷新操作。如果用户按下该键,则不会执行onBeforeUnload操作。
var refresh = false; //Control variable to control refresh access j$(window).bind('beforeunload', function(){ if (refresh == false) { // If F5 is not pressed return "Do you really want to leave?"; } });
j$(window).keydown(function(event) {
if (event.keyCode == 116) { // User presses F5 to refresh
refresh = true;
}
});
答案 2 :(得分:1)
有两件事需要考虑。 (1)释放f5键时执行“window.onbeforeunload”函数(onkeyup)。修改对话外观的任何内容必须在onkeydown之前发生。 (2)如果返回后跟空值,则该函数不起作用。
如果设置全局变量用作返回值,并且如果按下f5键使其为空,则在使用f5刷新时不会出现对话框。但是,如果按下“关闭”按钮,则会出现。请注意,即使返回值为null,“onbeforeunload”中的代码也会运行,因此如果您希望同时禁用代码,则必须检查返回值。
document.onkeydown = KeyCheck;
window.returnMessage="You are now logged out.";
function KeyCheck(e) {
var key = (window.event) ? event.keyCode : e.keyCode;
alert(key);
if(key==116) {window.returnMessage=null;}
}
$(function(){
window.onbeforeunload = function(event) {
if(window.returnMessage.length > 0) {logoutFunction();}
return window.returnMessage;
}
});