28

当用户离开我的页面时,我正在尝试发布数据。我终于设法找到了一个可行的解决方案,但是,当用户离开时,它会显示一个确认对话框。我试过return null;了,但没有用。是否可以禁用对话框?

window.onbeforeunload = function() {
    $.post("track.php", {
        async: false,
        refid: refid,
        country: country, 
        type: type,
    });

    return '';
}
4

6 回答 6

49

Mozilla 开发者网络页面

当此事件返回非空值时,将提示用户确认页面卸载。

这意味着处理程序的返回值必须是undefined(not '', false, or null) 以避免触发确认提示。

window.onbeforeunload = function() {

  $.post("track.php", {
  ...
  });

  return undefined;
}

在 javascript 中,您可以完全跳过返回值以获得相同的结果。

在带有 jquery 的咖啡脚本中,它类似于

$(document).ready ->
  $(window).bind('beforeunload', ->
    #put your cleanup code here
    undefined
  )
于 2015-04-14T12:43:05.993 回答
11

如果你想禁用对话框,请只写

window.onbeforeunload = function() { ... return; }

代替

window.onbeforeunload = function() { ... return ''; }.

我希望它会帮助你。

于 2017-04-05T09:43:14.913 回答
3

删除return声明也对我有用。

于 2020-04-15T09:38:51.083 回答
2

你能测试一下吗:

$(window).on('beforeunload', function (e) {
    if (e.originalEvent) $.post("track.php", {
        async: false,
        refid: refid,
        country: country,
        type: type,
    });
    else $.get("", {
        async: false
    });
    $(this).trigger('beforeunload');
}

这将创建许多无用的请求,但应该让您的第一个请求有足够的时间到达服务器。

于 2013-06-19T10:18:53.093 回答
0

我找到了一个非常简单的技巧来使用它

$(window).bind('onbeforeunload', function () {

$.post("track.php", {
async: false,
refid: refid,
country: country, 
type: type,
});

});
于 2013-06-19T10:40:54.847 回答
0

这是反应和打字稿:

  useEffect(() => {
    window.onbeforeunload = (ev: any) => {
      ev.preventDefault()
      anotherMethod()
    }
  }, [])
于 2021-03-05T04:26:04.243 回答