0

我有一个表单,里面有一些 div 块。所有的 div 都有它们的字段和按钮。单击按钮时,我只需要验证那个 div(按钮的父级)并将一些字段异步提交到服务器。一切正常,但不是验证。我使用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>

而不是调用userPasswordValidator.form()一个按钮单击和userProfileGeneralValidator.form()另一个按钮单击。是否有任何技巧可以实现我的目标:使用 jquery 分别验证几个表单部分?
PS:找到了一种解决方案:将几种形式放在主要形式中。每个 div 一个。但认为它很脏。
使用我使用的解决方案进行更新:最后我从这个问题中得到了答案,但做了以下更改:
我在 document.ready 的某个地方调用validate()整个表单的方法。作为验证选项,我为我需要验证的所有控件添加规则(它们嵌套在一些divs组中)。Messages/errorPositions/Success 我在文件中声明,我在其中单击该 div 中的按钮,其中嵌套了要验证的控件。并验证我使用的那个 div:

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

    return;
}

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

4

2 回答 2

3

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

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

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

于 2012-12-11T17:27:06.257 回答
1

我以前见过这种情况,但最快的方法是创建一个表单并使用一个 .validate 调用初始化整个事物。然后,如果您有验证的子案例,请使用带有 .valid() 方法的单个元素定位。在此处阅读更多信息:http: //docs.jquery.com/Plugins/Validation/valid

假设#txtOldPass 在#form1 中,它的外观如下:

$("#form1").validate();
$("button").click(function(e) {
  e.preventDefault();
  alert("Valid: " + $("#txtOldPass").valid());
});
于 2012-12-11T14:59:25.650 回答