9

我有一个ajax使用 onbeforeunload 提交的 textarea 来警告用户,如果他们尝试关闭浏览器,他们还没有提交 textarea。问题是我需要在提交成功时以某种方式清除 onbeforeunload,ajax以便 onbeforeunload 知道用户已成功提交表单。有没有办法用一行代码清除 onbeforeunload,类似于 clearTimeout 或 clearInterval?我将展示我目前拥有的 onbeforeunload 代码,即使我认为这并不重要 b/c 我正在寻找一个不同的函数来清除它。请不要框架。谢谢你。

函数调用

unsavedChangesWarning();

Onbeforeunload 函数

function unsavedChangesWarning(){
    window.onbeforeunload = function(){
        return 'If you close this page you will lose your stride update!';
    };
}
4

2 回答 2

23

window.onbeforeunload = null将清除它。只需在尝试将用户重定向到任何地方之前添加它。

于 2012-12-30T19:24:02.043 回答
1

对于 jQuery,这看起来像:

$(window).on('beforeunload', function (e)
{
  return 'Please dont leave me';
});

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

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

$('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.
  }
};
于 2017-05-26T19:01:59.653 回答