javascript方法检查是否脏,并在休假时显示提示,以及超时方法显示对话框
我编写了两个方法,一个是javascript,另一个是MVC razor应用程序,其中C#作为控制器中的代码javascript方法检查是否脏,并在休假时显示提示,以及超时方法显示对话框,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我编写了两个方法,一个是javascript,另一个是MVC razor应用程序,其中C#作为控制器中的代码 检查任何表单是否脏,并在我退出浏览器时提示,以便我可以保留并保存表单 如果表单处于空闲状态,那么我会打开一个jquery对话框,让用户选择保存或不保存就离开 我想在应用程序中的每个表单上引用此脚本。我正试图使它自我包含,这样我只需要在每个表单中包含它,而不需要在表单上编写代码 我对第2项有问题,无法显示对话。我试图将DIV附加到Jquery对话框中。我展示第1项的原因是向您展示我将这两项
DIV
附加到Jquery对话框中。我展示第1项的原因是向您展示我将这两项放在同一罚款中。即使是第1项也可能需要一些调整,因为它有时会工作(提示您离开网站,因为它发现表单脏了,有时它不会)。但我现在的重点是项目2
我将感谢您目前对第2项(重置超时)的帮助。提前谢谢
jQuery(函数($){
$.fn.areYouSure=函数(选项){
变量设置=$.extend(
{
'消息':'您将离开HRR应用程序。请保持在此页面并选择“下一步”以避免丢失更改。',
“dirtyClass”:“dirty”,
“更改”:null,
“沉默”:假,
“字段选择器”:“选择、文本区域、输入[type='text']、输入[type='password']、输入[type='checkbox']、输入[type='radio']、输入[type='hidden']”
},选项);
var getValue=函数($field){
if($field.hasClass('ays-ignore'))
||$field.hasClass('aysIgnore')
||$field.attr('data-ays-ignore')
||$field.attr('name')==未定义){
返回null;
}
如果($field.is(':disabled')){
返回“已禁用”;
}
var-val;
变量类型=$field.attr('type');
如果($field.is('select')){
类型='选择';
}
开关(类型){
案例“复选框”:
“无线电”案例:
val=$field.is(':checked');
打破
案例“选择”:
val='';
$field.children('option')。每个(函数(o){
var$选项=$(此选项);
如果($option.is(':selected')){
val+=$option.val();
}
});
打破
违约:
val=$field.val();
}
返回val;
};
var storeOrigValue=函数(){
var$字段=$(此字段);
$field.data('ays-orig',getValue($field));
};
var checkForm=函数(evt){
var isFieldDirty=函数($field){
返回(getValue($field)!=$field.data('ays-orig');
};
var isDirty=假;
var$form=$(this.parents('form');
//首先对目标进行测试,因为它最有可能是脏的。
if(isFieldDirty($(evt.target))){
isDirty=true;
}
如果(!isDirty){
$form.find(settings.fieldSelector).each(函数(){
$field=$(此字段);
if(isFieldDirty($field)){
isDirty=true;
返回false;//中断
}
});
}
markDirty($form,isDirty);
};
var markDirty=函数($form,isDirty){
var changed=isDirty!=$form.hasClass(settings.dirtyClass);
$form.toggleClass(settings.dirtyClass,isDirty);
//火灾变更事件(如需要)
如果(更改){
if(settings.change)settings.change.call($form,$form);
if(isDirty)$form.trigger('dirty.areYouSure',[$form]);
if(!isDirty)$form.trigger('clean.areYouSure',[$form]);
$form.trigger('change.areYouSure',[$form]);
}
};
var rescan=函数(){
var$form=$(此);
var newFields=$form.find(settings.fieldSelector).not(“[ays orig]”);
$(新字段)。每个(storeOrigValue);
$(newFields).bind('change keyup',checkForm);
};
如果(!settings.silent){
$(窗口).bind('beforeunload',函数(){
$dirtyForms=$(“form”).filter('.'+settings.dirtyClass);
//如果($dirtyForms.length>0){
返回设置.message;
//}
});
}
返回此。每个(函数(elem){
if(!$(this).is('form')){
返回;
}
var$form=$(此);
$form.submit(函数(){
$form.removeClass(settings.dirtyClass);
});
$form.bind('reset',函数(){markDirty($form,false);});
//添加自定义事件以支持动态添加新字段
$form.bind('rescan.areYouSure',rescan');
变量字段=$form.find(settings.fieldSelector);
$(字段)。每个(storeOrigValue);
$(字段).bind('change keyup',checkForm);
});
};
$('form')。你确定吗;
//调试器;
重置超时=函数(){
var-timeoutID;
//resetTimeout1();
//resetTimeout1=函数(){
//警报(“重置超时1”);
//if(timeoutID)clearTimeout(timeoutID);
//timeoutID=设置超时(ShowTimeoutWarning,5000);
//警报(超时ID);
//}
嘘
<body>
<div id="dlgWarning" title="Timeout warning" style="display:none">
<p>You will lose the changes in your application. Do you want to save it?</p>
</div>
</body>
$('dlgWarning').show();