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

时间:2009-12-22 18:09:35

标签: javascript jquery jquery-validate

我正在使用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调用。另一方面,我不能为验证器调用“添加”规则,因为我希望我的验证代码来自部分本身(实际上是一个插件)。有没有办法将我的验证逻辑与partial一起包含,并使用jqury.validate而不是手动验证。是否有其他验证框架可以允许这个?谢谢!

3 个答案:

答案 0 :(得分:3)

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

两个选项:

  1. 用HTML而不是JavaScript构建规则。例如,将required类添加到输入而不是添加所需规则。验证器支持此功能。
  2. 让表单的“部分”和“主要”部分构建选项 object ,然后在单个validate事件中调用ready,传递此对象,而不是两次调用validate

答案 1 :(得分:0)

如果您将大型表格分成多个部分,那么为什么不将每个部分都变成自己的形式呢?在完成每个部分后,您可以使用最终形式的隐藏输入继承值,或者更好地分配会话变量。

答案 2 :(得分:0)

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

var validator;

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

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