首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在卸载前清除Onbeforeunload

在卸载前清除Onbeforeunload
EN

Stack Overflow用户
提问于 2012-12-31 03:21:37
回答 2查看 9K关注 0票数 9

我有一个用ajax提交的文本区,它使用onbeforeunload来警告用户,如果他们试图关闭浏览器,他们还没有提交文本区。问题是,我需要在ajax提交成功后以某种方式清除onbeforeunload,以便onbeforeunload知道用户已经成功提交了表单。有没有一种方法可以用一行代码来清除onbeforeunload,类似于clearTimeout或clearInterval?我将展示我目前拥有的onbeforeunload代码,尽管我认为b/c无关紧要,但我正在寻找一个不同的函数来清除它。请不要使用框架。谢谢。

函数调用

代码语言:javascript
复制
unsavedChangesWarning();

Onbeforeunload函数

代码语言:javascript
复制
function unsavedChangesWarning(){
    window.onbeforeunload = function(){
        return 'If you close this page you will lose your stride update!';
    };
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-31 03:24:02

window.onbeforeunload = null会清除它的。在尝试将用户重定向到任何位置之前,只需添加此代码。

票数 21
EN

Stack Overflow用户

发布于 2017-05-27 03:02:00

对于jQuery,这看起来像这样:

代码语言:javascript
复制
$(window).on('beforeunload', function (e)
{
  return 'Please dont leave me';
});

$(window).off('beforeunload');

实际上,如果用户会话过期,我将使用上面的解决方案来允许干净的刷新。但是,对于您的用例,我认为在卸载之前简单地对on进行条件设置更有意义。

代码语言:javascript
复制
$('input, textarea, select').change(function()
{
  $(this).parents('form').addClass('dirty');
});
window.onbeforeunload = function()
{
  if ($('form.dirty').length)
  {
    var confirmationMessage = 'You have edited but not saved a form on this page.';

    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Gecko + Webkit, Safari, Chrome etc.
  }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14093826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档