Javascript 输入验证与在多页表单上提交所需的验证

Javascript 输入验证与在多页表单上提交所需的验证,javascript,jquery,asp.net,jquery-validate,Javascript,Jquery,Asp.net,Jquery Validate,我有一个多页表单,我正在尝试使用jquery验证来验证它。用户基本上有4个选项:next、prev、save和submit save、next和prev都将当前页面作为一个整体保存到表单中;submit与save相同,但会启动一些与工作流相关的附加功能,然后转到站点的另一部分 我需要随时验证用户输入。jquery验证工作得很好。但是我需要根据需要设置一些字段。因为表单在每个步骤都会保存,所以输入必须始终有效,但我不需要进行必要的验证,直到提交的最后一步 表单正在构建一个特定于其所在页面的验证动态

我有一个多页表单,我正在尝试使用jquery验证来验证它。用户基本上有4个选项:next、prev、save和submit

save、next和prev都将当前页面作为一个整体保存到表单中;submit与save相同,但会启动一些与工作流相关的附加功能,然后转到站点的另一部分

我需要随时验证用户输入。jquery验证工作得很好。但是我需要根据需要设置一些字段。因为表单在每个步骤都会保存,所以输入必须始终有效,但我不需要进行必要的验证,直到提交的最后一步

表单正在构建一个特定于其所在页面的验证动态列表,如:

$(document).ready(function() {
    $("#ctl01").validate({ onsubmit: false });
    $("#_Qn_0e868ebe").rules("add", { maxlength: 200 });
    $("#_Qn_d69e75a4").rules("add", { number: true });
    $("#_Qn_adffbdec").rules("add", { maxlength: 200 });
    $("#_Qn_adffbdec").rules("add", { digits: true });
});
现在,对于必填字段,我已经向它们添加了一个.isrequired类,并且我已经解耦了s以触发此客户端脚本:

function FormIsValid(sender, ishardsubmit) {
    var form = $("#ctl01");
    form.validate();
    if (form.valid()) {
        //if (ishardsubmit) {
        //    if (!IsRequiredValid()) { return false; }
        //}
        __doPostBack(sender, '');
    }
    return;
}
到目前为止,输入验证部分工作得非常好。我注释掉的部分是工作不太好的部分。它启动这个函数,在这个函数中,我试图动态添加所需的验证器并重新评估表单。我可以看到它在每个必填字段的.each循环中运行,但它似乎不起作用,因为它返回true,即使必填字段为空

function IsRequiredValid() {
    var $requiredgroup = $(".isrequired");
    $requiredgroup.each(function (i, item) {
        $(item).rules("add", { required: true });
    });
    form.validate();
    return form.valid();
}
我曾经考虑过在做这部分的时候加入.net必需的字段验证器,但是如果可能的话,我想坚持使用单一的解决方案。尤其是因为这感觉非常接近工作


想法?帮助谢谢

在必填字段中添加一个名为:SubmitRequired的类 实现以下两个功能:

function SaveClick(){
//ignore SubmitRequired on save (and any disabled fields)
  $("form").validate({ ignore: ".SubmitRequired, [disabled]" });  

  if $("form").valid()
  {
    do something;
  }
}

function SubmitClick(){
//ignore only disabled fields (if any))
  $("form").validate({ ignore: "[disabled]" });  

  if $("form").valid()
  {
    do something;
  }
}
您的jQuery。每个方法的构造都不正确

您希望在迭代中以整个对象为目标,而不是键/值对。因此,从函数参数中删除i,item并使用$this作为目标选择器

function IsRequiredValid() {
    var $requiredgroup = $(".isrequired");
    $requiredgroup.each(function() {
        $(this).rules("add", { required: true });
    });
    // form.validate(); // remove this line -> 100% superfluous
    return form.valid();
}
关于两个函数中的form.validate行:您不能在页面上调用.validate多次。它只能被调用一次来初始化表单上的插件


以后再叫它不会有任何效果。否则,我们就不需要使用.rules方法,只要在需要更改规则时调用.validate即可。然而,情况绝对不是这样。

很好,我错过了忽略。然而,这是否也会对一个字段禁用类型|格式验证,例如,必填字段和必输字段?@will |,这个答案不起作用。您不能只调用。请在任何时候更改选项时进行验证。.validate方法只能调用一次以初始化插件,并且任何后续调用都将被忽略。是!我必须在中添加另一个函数来取消设置所需的,以防在修复输入后决定保存或更改页面而不是提交:$this.rulesreleve,required;工作很好,谢谢!