2012-03-21 99 views
4

我有一个页面,用户需要输入一些数据,然后点击保存以验证更改,但我的问题是,如果用户试图关闭浏览器窗口或点击不同的链接导航到不同的页面..我需要删除用户已保存至今的所有条目。 我这样做以下方式如何停止卸载页面?

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

一切工作正常,如果他点击是的,问题就来了,当他在“否”点击..即使他点击No ..页面卸载方法被调用,它被重定向到一个不同的页面..但我希望它保持在相同的状态在同一页...你能帮我实现这一点。

感谢,并感谢您回应....

+2

可能的重复[如何阻止页面从卸载(导航离开)在JS?](http://stackoverflow.com/questions/1299452/how-do-i-stop-a-page-from-卸载 - 在js中导航) – 2012-03-21 18:22:45

+3

应该调用AFAIR,而不是'confirm',但返回一个字符串。 – kirilloid 2012-03-21 18:27:04

回答

0

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

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

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

+0

感谢你的回复..如何使AJAX再次呼叫..你可以请扩展它.. – user788312 2012-03-21 18:34:00

+0

@ user788312:不客气。我稍微扩大了答案。 – 2012-03-21 18:36:42

+0

+1我喜欢这个解决方案,但我认为他的应用程序处于无效状态。没有人可以保证ajax调用会删除数据...也有可能是用户失去了他的互联网连接或浏览器被任务管理器杀死了......等等。 – Neysor 2012-03-21 18:42:58

2

首先:你不能!不可能。 onbeforeunload只接受一个字符串作为返回值,然后关闭,如果用户想要的。

但是,想想如果计算机没有能源并关闭会发生什么?或者浏览器将由任务管理器关闭?或甚至更多“写实”:互联网连接丢失! =>那么你也有无效的数据状态!

您正试图解决错误的问题!你的问题不是这个功能,你的问题是你的公式的状态!

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

0

您可以使用这样的事情,只是调用下面的函数你的页面

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

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