如何在页面刷新时阻止调用onbeforeunload

时间:2011-04-09 16:43:06

标签: jquery

我希望在刷新页面时阻止调用函数confirmExit()。有可能吗?

<script language="JavaScript">
window.onbeforeunload = confirmExit;
function confirmExit()
{
   $.post("test.php");
}
</script>

3 个答案:

答案 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;
        }   
    });