2012-12-12 79 views
2

我试图模仿在这个网站上发现的功能。但它似乎没有工作。我试图用jQuery 1.4.4来做到这一点,在我搜索了很多例子后,我可以在这里找到我以及其他我想到的形式。防止页面卸载失败。想法?

$(window).bind('beforeunload', function() 
{ 
    if(show_unsaved_warning == true) 
    { 
     //e.preventDefault(); 
     var exitBeforeSave = confirm('You have unsaved changes'); 
     if(exitBeforeSave == false) 
     { 
      return false; 
     } 
    } 
}); 

它工作的点显示确认对话框,但无论你点击确定或取消,页面仍然加载/重新加载。我需要防止类似于堆栈的方式,所以如果在表单上进行了更改,我可以提示用户保存更改以防万一他们忘记了,或者让他们离开。在这个等式中有什么我缺少的东西,还是仅仅是不可能的?

请注意我意识到这是一个问题,在这里被问了十几遍,在其他地方的几十个论坛上。如果我能根据我发现的东西拼凑一些东西,否则我不会问。我来到这里与明显的重复问题,因为我目前卡住了。

编辑我改变了代码一点点与确认对话框的工作,然而,问题仍然非常遗体,并在Firefox我其实引起确定/取消对话框,之后确定/取消是点击,Firefox会创建另一个提示离开/保持自己的。我怎样才能避免这种行为?

+0

'如果(show_unsaved_warning ==真)'是更好的写作'如果(show_unsaved_warning)'。类似地,if(exitBeforeSave == false)'更好地写为'if(!exitBeforeSave)'。我知道这是一个小问题,比较布尔变量与真/假总是得到我的山羊。另外,将camelcase与下划线混合在一起,以确保功能相同的变量是以无类型语言失去理智的最可靠方法。 (是exitBeforeSave还是exit_before_save ???直到运行时才会知道)。 –

回答

2

为什么使用onbeforeunload进行确认?它默认是这样做的。

你过时的jQuery版本

$(window).bind('beforeunload', function() { 
    if(show_unsaved_warning == true) { 
     return 'You have unsaved changes.'; 
    } 
}); 

jQuery的1.7+

$(window).on('beforeunload', function() { 
    if(show_unsaved_warning == true) { 
     return 'You have unsaved changes.'; 
    } 
}); 

jsFiddle

+0

不幸的是,直到我的公司给我一个完整的重建绿灯我坚持使用jquery 1.4.4我试图带来一个新版本的独立和使用noconflict和软件打破了原作者把一个纠结的混乱的代码在一起..无论如何你说明过时的方式失败了我的作品,但仍然继续加载下一页或重新加载,因为我试图确认 – chris

+0

之前,当你点击取消下一页不应加载。你说它仍然加载? – epascarello

+0

不幸的是 – chris