问题背景
公司使用封装的Jalor框架。
切换中英文时,界面将刷新重载。
在界面存在表单时,直接重载会丢失数据,希望在这种情况下,识别用户是否做了修改,进行相应的提示。
如果没有改动,那么直接刷新界面。如果有改动,弹框提示用户是否保存数据。
解决方案
问题的关键在识别用户是否修改了数据。
搜索了一下目前常见的解决方案,有两种。
- 捕获界面的change事件,捕获到change事件则在切换中英文时弹框拦截跳转,进行提示。如果事件被触发,那么代表数据被修改。
- 对比表单初始数据,与切换中英文时的数据。如果不一致,那么数据被修改。
困难点
总的来说,是由于涉及的页面是一个复杂页面,表单的数据由多个部分组成。导致以上两种方法都不可行
第一个方法,为元素绑定事件。不可行。首先,识别元素困难,因为界面的组成部分除了直接写在html中,用Js循环加载,还涉及许多隐藏嵌套的界面。其次,元素数量太多,一一绑定将影响性能。
第二个方法,难点在于获取表单初始数据。表单的数据来源来自许多个异步请求,无法得到所有异步请求结束的时间点。此外,一些请求深深嵌套在子页面之中,很难一一识别进行初始数据保存。