javascript - 如果用户使用 onbefoerunload 导航,如何在 jexcel 单元格中发生更改时发出警报
问题描述
我想对 jexcel 单元格中所做的更改显示警报。
我有一个保存按钮来保存数据。现在,如果用户更改任何我想onbeforeunload
在导航到其他页面时显示警报的单元格。
var unsaved = false;
$(":input").change(function(){ //triggers change in all input fields including text type
unsaved = true;
});
function unloadPage(){
if(unsaved) {
return "You have unsaved changes on this page. Do you want to leave this page and discard your changes or stay on this page?";
}
}
window.onbeforeunload = unloadPage;
此代码仅适用于输入类型。如何使其适用于 jexcel 单元格。我使用 jexcel v4
解决方案
Jsuites 是 jexcel 的依赖项,并且已经有一个插件可以实现它。
<form id='myForm'>
<input type='hidden' name='data'>
<div id='spreadsheet'></div>
<input type='button' value='Save data' onclick='saveData(); myTracker.resetTracker()'>
</form>
<script>
var myTracker = jSuites.tracker(document.getElementById('myForm'));
jexcel(document.getElementById('spreadsheet'), {
onafterchanges: function(el) {
document.forms[0].name.value = el.jexcel.getData();
}
}
</script>
因此,基本上您实现 saveData 来保存数据并重置跟踪器以再次开始跟踪更改。
此处的另一项更改是仅在设置初始表格内容后才启动 formTracker。因此,如果用户打开表不执行任何更改,并且离开不会发出警报,因为数据没有更改。
资料来源:https ://bossanova.uk/jsuites/tracking-for-form-changes
推荐阅读
- reactjs - 单击处理程序未在 Firefox 中的 foreignObject 外部触发
- node.js - 如何将 NodeJS 应用程序转换为 war 文件
- c# - 如何将我的 HoloLens 应用程序的点击手势转换为我的桌面应用程序的鼠标单击?
- php - 用 php 和 mysql 处理大数据
- javascript - 使用 Cypress 在表中断言排序
- css - 位置:粘性不适用于内部元素
- c++ - libc++ 是否为太多的 basic_string_view 提供哈希专业化?
- ios - 从 VNCoreMLFeatureValueObservation 跟踪对象
- javascript - onhover div svg 路径颜色变化
- html - 在多个图像上放置文本