如何停止卸载页面?

时间:2012-03-21 18:20:16

标签: javascript jquery

我有一个页面,用户需要输入一些数据并单击“保存”以验证更改,但我的问题是用户是否正在尝试关闭浏览器窗口或单击其他链接以导航到其他页面。我需要删除用户目前保存的所有条目.. 我是按照以下方式做的

window.onbeforeunload = function() 
{
 if(confirm('Are you sure you want to navigate'))
  {
    //Invoke `enter code here`server side method
  }
 else
 {
   // return false;
 }
}

如果点击“是”,一切正常,当他点击“否”时出现问题。即使他点击“否”,页面卸载方法也会被调用,并重定向到另一个页面。但是我希望它保持在同一个州的同一页面...你能帮我实现这个目标。

感谢并感谢您的回复....

4 个答案:

答案 0 :(得分:7)

您无法阻止用户离开该页面。你可以做的是向他们发出信息,询问他们是否想要离开。

window.onbeforeunload事件应该返回一个字符串(并且只返回一个字符串)。该字符串将打印在浏览器发出的警告框中。

您无法使用自己的提醒框,也无法阻止用户离开(或重定向)。

window.onbeforeunload = function(){
    return 'Are you sure you want to leave?';
};

或者使用jQuery

$(window).on('beforeunload', function(){
    return 'Are you sure you want to leave?';
});

当用户离开页面时,您可以使用onunload事件进行AJAX调用(此处可能需要使用async: false。)

示例:

$(window).unload(function(){
    $.ajax({
        url: '/path/to/page/',
        async: false, // this may be needed to make sure the browser doesn't
                      // unload before this is done
        success: function(){
          // Do something
        }
    });
});

注意:为什么不在用户完成时保存所有内容,而不是这样做?如果用户没有完成,而不是保存它然后删除它?

答案 1 :(得分:2)

首先:你不能!不可能。 onbeforeunload仅接受字符串作为返回值,然后在用户需要时关闭。

然后想想如果计算机没有能量并关闭会发生什么?或者浏览器将由任务管理器关闭?或者甚至更多“逼真的”:互联网连接迷路了! => 然后您也获得了无效的数据状态!

您正在尝试解决虚假问题!你的问题不是这个功能,你的问题是你的公式的状态!

为什么需要某种功能?在点击保存之前保存数据吗?那就不要了!或者确保有另一个查询来检测数据库中未完成的数据,并在超时后将其删除!

答案 2 :(得分:0)

onbeforeunload只接受一个字符串作为返回值。该字符串将由浏览器显示,并保留在页面上或保留。但是你可以做到。

答案 3 :(得分:0)

你可以使用这样的东西,只需在页面上调用以下功能

function noBack() {
    window.onbeforeunload = function(){window.history.forward()}
}

如果window.history是干净的,则禁用后退按钮,否则它仅在第一次起作用。