如何使用jQuery Validate插件验证具有多个div的表单?

时间:2009-06-27 13:14:15

标签: jquery validation

我正在使用jQuery Validation plugin并且在我的表单中验证嵌套div中的项目时遇到问题:

   <form id="form1" runat="server">
    <div id="theForm">
        html <input type="text" class="required date"/>
        <br />
        aspx <asp:TextBox runat="server" CssClass="required" ID="txtone"></asp:TextBox>
        <br />        
        <div id="subArea"><input type="text" class="required" /></div>    
    </div>
    <asp:Button runat="server" ID="btnSub" Text="Save"  
            onclick="btnSub_Click"/>
    </form>

我的jQuery设置是:

<script type="text/javascript">
  $( document ).ready( function ()
            {                       
                $('#<%= Form.ClientID %>').validate();
            }
        );

        alert('<%= Form.ClientID %>');
    </script>

最终结果是前两个字段按预期运行,但是doe中的输入字段没有。我是否必须使用选择器做一些特殊的事情或专门添加字段?另外,如果我要向dom动态添加字段,我如何再次将validate()函数附加到表单,以便包含新的动态输入字段?

解决

许多SO Cred's去了God of Rock tvanfosson指出输入标签缺少id和name属性。一旦我添加了验证器就可以了。 EXTRA很酷,如果你有一个客户端模板,那么技术也可以在那里工作:

<script type="text/html" id="template">
        <# 
            var i;       

            for(i=0; i < 2; i++)
            {
                var id="tryit" + i;
        #>
            field: <#= id #> <input type="text" class="required" id="<#= id #>" name="<#= id #>"/>
            <br/>
        <#
            }           
        #>
    </script>

<form id="form1" runat="server">
    <div id="theForm">
        html <input type="text" class="required date" id="htmlText" name="htmlText"/>
        <br />
        aspx <asp:TextBox runat="server" CssClass="required" ID="txtone" name="txtone"></asp:TextBox>
        <br />        
        <div id="subArea"><input type="text" class="required" id="subOne" name="subone"/></div>      
        <div id="newArea"></div>  
    </div>
    <asp:Button runat="server" ID="btnSub" Text="Save"  
            onclick="btnSub_Click"/>
    </form>
    <script type="text/javascript">
        $( document ).ready( function ()
            {   
                var newHTML = parseTemplate($('#template').html(), {"one" : "one"});                
                $('#newArea').html(newHTML);

                $('#<%= Form.ClientID %>').validate();              
            }
        );          

    </script>

1 个答案:

答案 0 :(得分:4)

您的代码对我来说是正确的,但我注意到您的输入字段没有名称。没有查看validate插件的实际代码,我不确定这是否会导致问题。您可能想尝试为每个字段添加名称(如果合适,还要添加id),并查看您的行为是否发生了变化。

 <input type="text" id="date" name="date" class="required date" />