我一直在努力寻找解决此问题的最佳方法,这是警告用户ASP.NET网页表格即将导致数据丢失:
通过链接点击更改表单, - 打“回”, - 关闭浏览器
我希望在他们这样做时出现一个简单的对话框,让他们可以改变主意。如果他们这样做,那么表格仍然存在。如果他们不这样做,继续。
我已经尝试了几个jQuery插件来处理这个问题,目前我正在使用dirty_form。当我点击一个链接或尝试关闭窗口时它正在捕获脏表格并提醒我(它不会回来)。
不幸的是,处理脏的形式是不够的,因为我似乎无法做任何事情。我的代码:
<script type="text/javascript">
$(document).ready(function () {
$("#form2").dirty_form().dirty(function (event, data) {
/*what here */
});
});
</script>
我如何设置它,以便如果他们选择前进,它会这样做,如果他们不这样做,它不会?
另外,如何捕获浏览器“Back”功能并以同样的方式处理它?</ p>
答案 0 :(得分:1)
在这里关于SO的this问题回答,我在我们的应用程序中成功实现了这个dirty_form插件。这就是我们最终做的事情:
// A global variable to table any existing onbeforeunload event
var oldOnBeforeUnloadEvent;
// onDirty event that gets triggered by the plugin.. add visual cue to the user to show dirtiness
function onDirty(event, data) {
$("#form2 div.dirtyIndicator").addClass("redAsteriskBG");
}
// onClean event that gets triggered by the plugin.. remove the dirty indicator
function onClean(event, data) {
$("#form2 div.dirtyIndicator").removeClass("redAsteriskBG");
}
// Check for presence of any inputs that are changed
function checkForDirtyElements() {
var message = '';
var dirtyElements = $('.myChangedClassName').length;
if (dirtyElements > 0) {
message += "IF YOU CONTINUE, ALL YOUR CHANGES WOULD BE LOST!";
}
return message;
}
// Our onbeforeunload event that does all the magic
function myOnBeforeUnload() {
var message = checkForDirtyElements();
if (message === '') {
if (oldOnBeforeUnloadEvent !== null) {
message = oldOnBeforeUnloadEvent();
}
}
if (message.length > 0) {
return message;
}
}
$(document).ready(function () {
// On page load set-up/initialize the dirty form with onDirty and onClean events
$("#form2").dirty_form({
changedClass: 'myChangedClassName'
}).dirty(onDirty).clean(onClean);
// Save the existing onbeforeunload event to a global variable and attach our custom onbeforeunload
oldOnBeforeUnloadEvent = window.onbeforeunload;
window.onbeforeunload = myOnBeforeUnload;
});