javascript方法检查是否脏,并在休假时显示提示,以及超时方法显示对话框

javascript方法检查是否脏,并在休假时显示提示,以及超时方法显示对话框,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我编写了两个方法,一个是javascript,另一个是MVC razor应用程序,其中C#作为控制器中的代码 检查任何表单是否脏,并在我退出浏览器时提示,以便我可以保留并保存表单 如果表单处于空闲状态,那么我会打开一个jquery对话框,让用户选择保存或不保存就离开 我想在应用程序中的每个表单上引用此脚本。我正试图使它自我包含,这样我只需要在每个表单中包含它,而不需要在表单上编写代码 我对第2项有问题,无法显示对话。我试图将DIV附加到Jquery对话框中。我展示第1项的原因是向您展示我将这两项

我编写了两个方法,一个是javascript,另一个是MVC razor应用程序,其中C#作为控制器中的代码

  • 检查任何表单是否脏,并在我退出浏览器时提示,以便我可以保留并保存表单
  • 如果表单处于空闲状态,那么我会打开一个jquery对话框,让用户选择保存或不保存就离开
  • 我想在应用程序中的每个表单上引用此脚本。我正试图使它自我包含,这样我只需要在每个表单中包含它,而不需要在表单上编写代码

    我对第2项有问题,无法显示对话。我试图将
    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();