【问题标题】:JQuery validate with several validators per form每个表单使用多个验证器进行 JQuery 验证
【发布时间】:2012-12-11 13:05:36
【问题描述】:

我有一个表单,里面有一些 div 块。所有的 div 都有它们的字段和按钮。单击按钮时,我只需要验证那个 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 一个。但认为它很脏。
使用我使用的解决方案进行更新: 最后我从这个问题中得到了答案,但做了以下更改:
我在 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 是一个变量,包含用于验证的附加选项(消息/位置/等)。谢谢大家帮忙。

【问题讨论】:

    标签: jquery jquery-validate forms


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,解决方案简单、完整且运行良好!所以我可以在不创建
      的情况下验证我喜欢的任何容器!奇怪,在文档中找不到这个..它真的过时且不完整:(
    • mm..tested..没有额外的表单标签实际上无法工作..stackoverflow.com/a/4938022/47672
    • 没错,输入元素仍然必须在表单中,但是您可以使用它来验证表单中的部分。
    • 用解决方案更新了问题。要到达那里-我使用了您的答案。再次感谢 :) 祝你有美好的一天!
    【解决方案2】:

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

    假设#txtOldPass 在#form1 中,如下所示:

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

    【讨论】:

    • 文档可能已过期? This page 表明 .element() 是检查单个元素的方法(布尔值);像这样:$("#myform").validate().element("#myselect"); 虽然,我现在倾向于.valid() 是更好的方式。
    • 谢谢,明天尽快测试。
    猜你喜欢
    • 2017-07-17
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多