我正在使用 jquery dirrty 插件来检查表单的状态并防止它在有一些未保存的更改时重新加载。
流动:
1)我已经初始化 jquery.dirty 如下
$(function(){
initializeDirtyForm();
})
/** dirty form initialization*/
function initializeDirtyForm(){
$("#uAForm").dirrty().on("dirty", function(){
$("#uAFormSubmit").removeAttr("disabled");
}).on("clean", function(){
$("#uAFormSubmit").attr("disabled", "disabled");
});
}
2)页面上有一个表格,当它点击 td 单元格时,它会进行 ajax 调用。
function ajaxCallEdit()
{
var result = checkDirtyStatus();
if(result === false) {
return;
}
$.ajax({
....
....
....
....
success:function(){
initializeDirtyForm();
}
)}
}
/** check if the form is dirty */
function checkDirtyStatus(){
dirtyStatus = $("#uAForm").dirrty("isDirty");
if(dirtyStatus == true){
if (confirm("Changes you made may not be saved. Do you still want to reload?")) {
return true;
}else{
return false;
}
}
}
如果表单很脏,它可以正常工作并显示警告消息。
问题
这是主要问题,如果我强制它重新加载,(这意味着它实际上不会重新加载页面,而是会进行 ajax 调用)它仍然将表单的状态设置为脏。我尝试过重新初始化 jquery 表单,但表单仍被标记为脏。
为了更加确定表单的实际状态是什么,我检查了状态并尝试通过控制台登录 ajaxSuccess。
....
success: function(){
initializeDirtyForm();
var result = checkDirtyStatus();
console.log(result);
}
...
然而,安慰这个结果显示的价值为undefined
。
我找不到与手动设置相关的任何文档,并且重新初始化没有按预期工作。
因此,如果您是 javascript 向导,请检查上面附加的 jquery.dirrty.js 文件,并检查我是否可以触发 js 文件中的以下部分或任何其他有助于我解决问题的 hack。
setClean: function(){
this.isDirty = false;
this.history[0] = this.history[1];
this.history[1] = "clean";
}
如果您需要任何进一步的细节,请告诉我。