2012-12-11 53 views
0

我有一个窗体,里面有一些div块。所有的div都有他们的领域和按钮。在按钮单击我需要验证那个div(按钮的父)并提交一些字段到服务器异步。一切正常,但不是验证。我使用JQuery validation plugin。因为我看到我不能写这样的代码:JQuery使用多个验证器验证每个表格

<script type="text/javascript"> 
//....... 
    // Validator for general information 
     var userProfileGeneralValidator = $("#form1").validate({ 
      onkeyup: false, 
      onclick: false, 
      onfocusout: false, 
      rules: { 
       txtPrivateNumber: { 
        required: true 
       } 
      }, 
      messages: { 
       txtPrivateNumber: { 
        required: "Required!" 
       } 
      }, 
      errorPlacement: function (error, element) { 
       if (error.text() != "") { 

       } 
      }, 
      success: function (lbl) { 

      } 
     }); 

     // Validator for password information 
     var userPasswordValidator = $("#form1").validate({ 
      onkeyup: false, 
      onclick: false, 
      onfocusout: false, 
      rules: { 
       txtOldPass: { 
        required: true, 
        minlength: 5 
       } 
      }, 
      messages: { 
       txtOldPass: { 
        required: "Required!" 
       } 

      }, 
      errorPlacement: function (error, element) { 
       if (error.text() != "") { 
       } 
      }, 
      success: function (lbl) { 

      } 
     }); 
</script> 

而不是一个按钮,点击userProfileGeneralValidator.form()其他按钮点击呼叫userPasswordValidator.form()。是否有任何技巧可以实现我的目标:用jQuery分别验证几个表单部分?
PS:找到了一个解决方案:在主表单中放置几个​​表单。每格一个。但认为它很脏。
更新与解决方案IVE使用:在我已经采取了回答这个问题的结束,而是进行了如下修改:
我打电话的地方整个窗体上的validate()方法的document.ready。作为验证选项,我为所有需要验证的控件添加了规则(它们作为组嵌套在一些divs中)。消息/ errorPositions /成功我声明在文件中,我在那里工作点击按钮在该divs,其中验证控件嵌套。并验证只是DIV我使用:

var validator = $("#topUserProfile").validate(userProfileGeneralValidator); 
// Validate and save general information 
if (!validator.form()) { 

    return; 
} 

哪里#topUserProfile是包含控制div的名称; userProfileGeneralValidator是变量,它包含用于验证的附加选项(消息/位置/等)。谢谢大家,谁帮了忙。

回答

2

我已经用了这个要求传递多个元素对jQuery验证插件有效()方法,例如这个

$('#testdiv :input').valid() 

一些变化。如果你只需要调用$('#TE stdiov')。valid()这不起作用,但是使用:input选择器,调用会告诉你jquery包装集合中的所有表单元素是否有效。

+0

谢谢,解决方案很简单,完整,工作得很好!所以我可以在不创建

的情况下验证我喜欢的任何容器!奇怪的是,无法在文档中发现它..它真的过时和不完整:( – 0x49D1

+0

毫米..tested ..不实际工作没有额外的形式标签.. http://stackoverflow.com/a/4938022/47672 – 0x49D1

+1

这是正确的,输入元素仍然必须是一种形式,但你可以使用它来验证表单中的部分。 –

1

我以前见过这个,但最快的方法是创建一个窗体并用一个.validate调用初始化整个事物。然后,如果您有验证的子案例,请使用.valid()方法使用单个元素定位。了解更多关于在这里:​​ http://docs.jquery.com/Plugins/Validation/valid

下面是它会怎么看,假设#txtOldPass是#form1的内部:

$("#form1").validate(); 
$("button").click(function(e) { 
    e.preventDefault(); 
    alert("Valid: " + $("#txtOldPass").valid()); 
}); 
+0

文档可能已过时? [This page](http://docs.jquery.com/Plugins/Validation/valid)显示'.element()'是检查单个元素的方法(布尔)。像这样:'$(“#myform”)。validate()。element(“#myselect”);'尽管我倾向于'.valid()'是更好的方法。 – Sparky

+0

无论哪种方式的作品,真的取决于你。 –

+0

谢谢,明天尽快测试吧。 – 0x49D1