Javascript 检查表单是否脏,并在动态删除它之前通知用户

Javascript 检查表单是否脏,并在动态删除它之前通知用户,javascript,html,jquery,jquery-dirtyforms,Javascript,Html,Jquery,Jquery Dirtyforms,我的页面有一个表单列表。当用户单击列表中的表单名称时,D3将动态构建每个表单。代码如下: $(文档).ready(函数(){ //为每次单击显示相应的表单 d3.选择全部(“.form name”)。在(“单击”,函数()上){ //首先检查当前表单是否脏 var isDirty=$(document.querySelector(“#main part form”)).dirtyForms('isDirty'); 如果(isDirty){ log('formisdirty'); //显示确认对

我的页面有一个表单列表。当用户单击列表中的表单名称时,D3将动态构建每个表单。代码如下:

$(文档).ready(函数(){
//为每次单击显示相应的表单
d3.选择全部(“.form name”)。在(“单击”,函数()上){
//首先检查当前表单是否脏
var isDirty=$(document.querySelector(“#main part form”)).dirtyForms('isDirty');
如果(isDirty){
log('formisdirty');
//显示确认对话框
}否则{
log('表单不脏');
buildForm(d3.select(this.attr('id'));
}
})
});
函数buildForm(id){
var formId=“表单”+id;
var myform=d3.选择(“主要部分”)
.选择(“表格”)
.attr(“id”,formId);
myform.selectAll(“*”).remove();
myform.append(“span”).text(“对“+formId的反馈”);
//附加上下投票单选按钮
var无线电组=myform
.append('div'))
.attr('class','formgroup');
//向上投票电台
var无线电组=无线电组
.append('div'))
.attr('class','form check form check inline upvote');
电台
.append('输入')
.attr('class','form check input')
.attr('type','radio')
.attr('name','voting radio')
.attr('value','thumbup')
.attr('必需','');
radio_grp_chk.append('span').text('Up');
//反对票电台
var radio_grp_chk2=无线电组
.append('div'))
.attr('class','form check form check inline downvote');
无线电通信组chk2
.append('输入')
.attr('class','form check input')
.attr('type','radio')
.attr('name','voting radio')
.attr('value','thumbdown')
.attr('必需','');
radio_grp_chk2.append('span')。text('Down');
//追加反馈文本区域
var text_group=myform.append('div').attr('class','form group');
文本组
.append('标签')
.attr('for','feedback txt')
.文本(“反馈”);
文本组
.append('textarea')
.attr('class','form control feedback text')
.attr('id','feedback text')
.attr('占位符','输入…');
//提交按钮
myform.append('按钮')
.attr('type','submit')
.attr('class','btn btn主要评级btn')
.attr('id','submit form')
.文本(“提交”);
//初始化脏表单
$(“#”+formId).dirtyForms({
对话框:{
标题:“等等!”
},
信息:“您忘记保存您的详细信息。如果您现在离开,它们将永远丢失。”
});
//绑定单击按钮上的事件
myform.选择(“#提交表单”)。单击(“单击”,函数(){
d3.event.preventDefault();
//验证所有表格:
变量形式=$(“#主要部分形式”)[0];
var valid=form.checkValidity();
form.reportValidity();
如果(有效){
//提交
console.log(“表单已提交!”);
//将窗体状态设置回“清除”
$(“#”+formId).dirtyForms('setClean');
}
});
}

类型
表格A
表格乙
表格C
试试这个

 var isDirty = $("form").dirtyForms('isDirty');


if (isDirty) {
  console.log('form is dirty');
   result = window.confirm('You forgot to save your details. If you leave now, they will be lost forever.');
   if(result){
     //implement logic
     $('form').dirtyForms('setClean');
     buildForm(d3.select(this).attr('id'));
   }
   if(!result){
     return
   }
} 
//...rest of code

谢谢你的回复。
#主要部分是环绕表单的div。我试图定义自定义警报,但它仅在页面刷新时触发,并且警报是带有一般消息的浏览器本机警报。如何在上面的
if(isDirty)
块中触发对话框?我已经更新了我的答案,您可以查看它,看看它是否适合您