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

时间:2014-02-04 02:23:51

标签: javascript jquery asp.net jquery-validate

我有一个多页表单,我试图使用jquery验证进行验证。用户基本上有4个选项:nextprevsavesubmit

savenextprev都将当前页面保存为整个表单; submitsave相同,但会触发一些与工作流相关的其他功能,然后转到网站的其他部分。

我需要始终验证用户输入。 jquery验证工作得很好。但是......我需要根据需要设置一些字段。因为表单是在每一步保存的,所以输入需要始终有效,但我不需要在最后(submit)之前进行必要的验证。

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

$(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类,并且我已经将<asp:linkbutton>解耦为触发此客户端脚本:

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必填字段验证器来完成这一部分,但我想,如果可能的话,坚持使用单一的解决方案。特别是因为这感觉所以接近工作。

想法?救命?谢谢!

2 个答案:

答案 0 :(得分:0)

您的jQuery .each()方法构造不正确。

您希望在迭代中定位整个对象,而不是键/值对。因此,从函数参数中删除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()。但是,情况肯定不是这样。

答案 1 :(得分:-1)

在必填字段中添加一个类,名为:“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;
  }
}