Jquery验证验证表单数组

时间:2011-07-25 12:44:24

标签: jquery validation

我们如何验证以下代码? 我想验证名为software_name的输入不为null。怎么写代码? 验证规则看起来只支持单个输入。

<input name="software_name[]" type="text" class="input_txt_l software-name" value="" />
<input name="software_name[]" type="text" class="input_txt_l software-name" value="" />
<input name="software_name[]" type="text" class="input_txt_l software-name" value="" />
<input name="software_name[]" type="text" class="input_txt_l software-name" value="" />

============================更新于2011/07/26 ============ ============

我无法理解你的帮助,我想我的解释并不清楚。再次。

我将此验证用于表单验证。 http://bassistance.de/jquery-plugins/jquery-plugin-validation/

当我们验证单个输入时,我们可以使用它来验证name元素。 HTML代码:

<form action="url/saved" method="post" id="server-form">
    Name:<input name="name" type="text" class="input_txt" value=""/>    
</form>

javascript代码:

var v = $('#server-form').validate({
        rules:{
            name:{
            required:true,
            minlength:2,
        maxlength:64
            }
        },
        messages:{
            name:{
            required:'can not be null',
            minlength:"too short",
        maxlength:"too long"
            }

        },

        onfocusout: function(element) {
        if ( !this.checkable(element)) {
            this.element(element);
        }
        },

        errorPlacement: function(error, element) {
            $(element).setValidateError({
        errorBox:error
            });
        },

        success: function(element) {
            $(element).setValidateOK();
    }

    });

但是当我们使用表单数组时。像这样

<input name="software_name[]" type="text" class="input_txt_l software-name" value="" />

jquery-validation-plugin看起来不支持。我是对的吗?

唯一看起来喜欢@rharshath的方式?

$('.software-name').each(function(i, $input) {
    if( $.trim($input.val()) == "" ) {
        // go nuts - alert it, or highlight that field, 
        // or put a tooltip beside it - whatever.
    }
});

我们必须自己破解它?

4 个答案:

答案 0 :(得分:2)

按照以下步骤操作。

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();
}

答案 1 :(得分:1)

使用:if($('。software-name [value!=“”]')。length == $('。software-name')。length)

答案 2 :(得分:1)

我知道这是一个长期存在的问题,但我今天遇到了这个问题,并提出了另一种解决jQuery验证问题的form_field[]问题。

我正在做的是使用php回显多个表单字段。 jQuery Validate的问题是名称是相同的。所以我通过在名称中添加数组索引来使名称唯一,同时仍保持其数组行为,如下所示:

<?php for ($i=0; $i<10; $i++) { ?>
  <input type='text' name='anArray[<?php echo $i;?>]' class='required'/>
<?php } ?>

<script>
    $(function(){
        $('form').validate();
    });
</script>

现在它就像一个魅力 - 虽然先进的规则等显然需要另一个讨厌的循环或其他一些但我只需要required部分。希望这有助于其他人。

答案 3 :(得分:0)

像这样:

$('.software-name').each(function(i, $input) {
    if( $.trim($input.val()) == "" ) {
        // go nuts - alert it, or highlight that field, 
        // or put a tooltip beside it - whatever.
    }
});

如果您的验证插件不支持您想要的内容,那么您可以获取其源代码并修改它以获得您想要的功能,或者您可以为自己编写完整的插件(这是“不要那样做” “领土”。

如果您正在做的事情与每个人的工作特别不同,我经常会发现插件不是您的解决方案。没关系,但你必须编写更多的代码并减少对插件的依赖。

没有痛苦没有收获。