在 SessionStorage 中未保存更改时警告用户

Posted

技术标签:

【中文标题】在 SessionStorage 中未保存更改时警告用户【英文标题】:Warn user when unsaved changes in SessionStorage 【发布时间】:2018-11-28 22:51:55 【问题描述】:

我正在寻找一种方法来警告用户,如果他们在提交完整的表单之前从多页表单中导航离开(关闭浏览器,单击返回按钮)。驻留在不同页面路径上的表单的每个部分都保存在 SessionStorage 中。

我正在使用 onbeforeunload 事件来触发 “未保存的更改”对话框,但它不会在 Chrome 中触发,除非用户与页面交互并且因此未检查条件(如果存在 SessionStorage,则返回对话框)并且不显示对话框。

感谢任何替代方案、建议或智慧!

// Display dialog when user navigates away without submitting form
// isStoredData condition is never met in Chrome unless user interacts with page
window.onbeforeunload = function () 
  let isStoredData = sessionStorage.getItem("MyFormDataInSessionStorage");
  let isDirty = $scope.MyForm.$dirty;
  if (isDirty || isStoredData) 
    return "Your application will not be saved.";
  
  return undefined; 
;

// Prevent unsaved changes dialog when form is submitted
$('form').submit(function () 
  window.onbeforeunload = undefined;
);

【问题讨论】:

Intercept page exit event的可能重复 【参考方案1】:

你应该像下面的 sn-p 那样使用 $(window).on:

$(window).on('beforeunload', function() 
   //Write your logic here.
);

【讨论】:

以上是关于在 SessionStorage 中未保存更改时警告用户的主要内容,如果未能解决你的问题,请参考以下文章

在 sessionStorage 中保存 Javascript 对象

html 进行jsonp调用并将其保存在sessionStorage中

localstorage sessionstorage cookie 备忘

利用localStorage事件来跨标签页共享sessionStorage

localStrorage sessionStorage cookie

sessionStorage的使用