This question already has answers here:
Using JQuery Validate Plugin to validate multiple form fields with identical names
                                
                                    (12个答案)
                                
                        
                                5年前关闭。
            
                    
我有一个做2件事情的表格:


将名字和电子邮件地址传递给PHP。
如果用户要提交多于一组或两套数据,则在单击时动态添加一组新的名称/电子邮件字段。


由于我不知道每个用户可以选择提交多少个集合,因此我将数据通过数组传递给PHP(使用名称后接[]),因此我可以使用foreach循环并始终获取每个数据集。这是一些代码,可以更好地理解:

<form method="post" action="submit.php" id="formID">
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="contacts">
<tr>
    <td><label class="namelabel"><span>Friend's First Name:</span><input type="text" name="friendName[]" class="friendName" id="name1" /></label></td>
    <td><label class="emaillabel"><span>Friend's Email:</span><input type="text" name="friendEmail[]" class="friendEmail" id="email1" /></label></td>
</tr>
</table>
<p class="addmore"><a href="#" id="addclick">Click Here To Send This To More Friends</a></p>
<input type="submit" value="Spread The News!" name="submit" />
    </form>
<script language="javascript" type="text/javascript" src="include/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript" src="include/jquery.validate.pack.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        fieldCount = 1;
        $("#addclick").click(function(e){
            e.preventDefault();
            fieldCount+=1;
            $('#contacts tr:last').after('<tr><td><label class="namelabel"><span>Friend\'s First Name:</span><input type="text" name="friendName[]" class="friendName" id="name' + fieldCount + '" /></label></td><td><label class="emaillabel"><span>Friend\'s Email:</span><input type="text" name="friendEmail[]" class="friendEmail" id="email' + fieldCount + '" /></label></td></tr>');
        });
        $("#formID").validate({
rules: {
    "friendName[]": "required",
    "friendEmail[]": "required email",
  }
});
        });
    </script>


问题是,只有第一个friendName []和friendEmail []在提交时才得到验证。您必须单击任何其他具有相同名称的字段才能使验证工作(就像懒惰验证仅在焦点之后才生效)

如何在表单字段中使用相同的名称,并同时验证所有这些名称?

最佳答案

请遵循以下步骤。

1)打开jquery.validate.js文件
2)查找checkForm:function(){
3)用下面的代码替换此功能。

checkForm: function() {
    this.prepareForm();
    for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
        if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
            for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
                    this.check( this.findByName( elements[i].name )[cnt] );
            }
        } else {
            this.check( elements[i] );
        }
    }
    return this.valid();
}

关于javascript - 具有相同表单名称的Jquery验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1041897/

10-12 12:53
查看更多