JQuery使用每个表单的几个验证器进行验证

时间:2012-12-11 13:05:37

标签: jquery jquery-validate html-form

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

<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>

然后点击一个按钮点击userPasswordValidator.form(),点击其他按钮点击userProfileGeneralValidator.form()。是否有任何技巧可以实现我的目标:使用jquery单独验证几个表单部分?
PS:找到了一个解决方案:在主窗体中放置几个​​表单。每个div一个。但想想它的脏 使用解决方案的UPDATE:最后我从这个问题中得到了答案,但做了以下更改:
我在document.ready中的某个地方调用整个表单上的validate()方法。作为验证选项,我为需要验证的所有控件添加规则(它们作为组嵌套在一些divs中)。消息/ errorPositions / Success我在文件中声明,我在那里使用点击该div中的按钮,其中要嵌套的控件是嵌套的。并验证我使用的div:

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

    return;
}

其中#topUserProfile是包含控件的div的名称; userProfileGeneralValidator是变量,包含验证的其他选项(消息/位置/等)。谢谢大家,谁帮忙。

2 个答案:

答案 0 :(得分:2)

我用于此要求的是将多个元素传递给jquery validate plugin valid()方法,例如此方法的一些变体

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

如果你只是调用$('#testdiv')。valid()这将不起作用,但是使用:input选择器,调用将告诉你jquery包装集中的所有表单元素是否有效。

答案 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());
});