window.onbeforeunload在页面刷新而不是页面关闭时执行

时间:2013-12-23 09:34:49

标签: javascript onbeforeunload

当发生关闭事件时,我正在使用window.onbeforeunload弹出确认对话框,但是页面刷新时会显示确认对话框,并且不会在页面关闭时执行。

这是JavaScript代码:

<script language="JavaScript">
    window.onbeforeunload = confirmWinClose();
    function confirmWinClose() {
        var confirmClose = confirm('Close?');
        return confirmClose;
    }    
</script>

我在Chrome,Firefox和Internet Explorer上尝试过它。

4 个答案:

答案 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>