代码之家  ›  专栏  ›  技术社区  ›  Aleksandar Vucetic

一个表单上有多个jquery验证器

  •  0
  • Aleksandar Vucetic  · 技术社区  · 15 年前

    我正在使用jquery.validate插件并面临以下情况:

    <form id="myForm" ....>
        <input type="text" id="value1"/>
    
        <!-- Here is some code rendered from the partial -->
        <script type="text/javascript">
        $(document).ready(function() {
            var validator = $('#myForm').validate({
                rules: {
                    value_from_partial: {
                        required: true
                    }
                },
                messages: {
                    value_from_partial: {
                        required: "Enter your firstname"
                    }
                },
                submitHandler: function() {
                    alert("submitted!");
                }
            });
        });
        </script>
        <input type="text" id="value_from_partial"/>
        <!-- End of code rendered from the partial -->
    </form>
    <script type="text/javascript">
        $(document).ready(function() {
            var validator = $('#myForm').validate({
                rules: {
                    value1: {
                        required: true
                    }
                },
                messages: {
                    value1: {
                        required: "Enter your firstname"
                    }
                },
                submitHandler: function() {
                    alert("submitted!");
                }
            });
        });
    </script>
    

    在部分中添加的验证不起作用。当我从主HTML中删除.validate时,部分工作中的验证将生效。jquery.validate似乎不允许在同一表单上有两个.validate调用。另一方面,我不能调用验证器的“添加”规则,因为我希望我的验证代码来自部分本身(实际上是一个插件)。是否有任何方法可以将我的验证逻辑与部分包含在一起,并使用jqury.validate而不是手动验证。是否有其他验证框架可以允许这样做?谢谢!

    3 回复  |  直到 15 年前
        1
  •  3
  •   Craig Stuntz    15 年前

    你说的对,你不能打电话 validate() 两次。嗯,你可以,但是这些选择第二次没有效果。

    两种选择:

    1. 用HTML而不是JavaScript构建规则。例如,添加 required 类,而不是添加必需的规则。验证器支持这个。
    2. 让表单的“部分”和“主要”部分建立选项 对象 然后打电话 validate 在单一 ready 事件,传递此对象,而不是调用 验证 两次。
        2
  •  0
  •   menkes    15 年前

    如果你把一个大的表单分成多个部分,那么为什么不把每个部分都变成自己的表单呢?当每个部分完成后,您可以使用最终表单中的隐藏输入来结转值,或者更好的做法是分配会话变量。

        3
  •  0
  •   Corey Ballou    15 年前

    在加载分部之前,您可以尝试使验证器成为全局变量。

    var validator;
    

    接下来,您将尝试取消绑定第二个document.ready块中第一个validate()调用的submit方法:

    $('#myForm').unbind('submit');