1

如何input使用jquery.validate插件验证文件数组?

该代码适用于单个文件,但不适用于多个上传,其中name=""是一个数组。

问:

<script type="text/javascript">
    $(document).ready(function(){
        $("#Main").validate({
            rules: {
                pic: { required:true, accept: "jpg|jpeg" }
            }}
        );
    });
</script>

单次上传:

<html>
    <head>
    </head>
    <body>
        ...
        <td>Fotografija 1:</td>
        <td> <input type="file" class="fup" name="pic" /> </td>
        ...
    </body>
</html>

多次上传

<html>
    <head>
    </head>
    <body>
        ...
            <td>Fotografija 1:</td>
            <td> <input type="file" class="fup" name="pic[]" /> </td>
        </tr>
        <tr>
            <td>Fotografija 2:</td>
            <td> <input type="file" class="fup" name="pic[]" /> </td>
        </tr>
        <tr>
            <td>Fotografija 3:</td>
            <td> <input type="file" class="fup" name="pic[]" /> </td>
        ...
    </body>
</html>
4

2 回答 2

0

你可以试试这个:

 $("input.fup").each(function(){
       $(this).rules("add", {
           required:true, 
           accept: "jpg|jpeg"
       });                    
 });

详情请看这里

是另一个资源。

于 2012-05-28T10:57:22.500 回答
-2

这里有问题

"pic[]" {your rules}

rules("add) 

仅适用于数组中的第一个元素。

===

好的,我找到了解决方案:你应该修复jquery.validate.js

查找checkForm功能

并将其替换为:

        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();
    },
于 2013-09-16T11:22:54.780 回答