Javascript JQuery动态验证多维数组中的文件大小

Javascript JQuery动态验证多维数组中的文件大小,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我尝试使用jquery验证,但我花了4个多小时搜索如何解决我的问题,但没有找到它。问题是,当我尝试在多维数组中使用jquery验证文件大小时,它不起作用。它仍然可以提交表单而不显示错误消息 这是我的领域 var numberIncr = 1; $('#add-berkas').click(function () { var box_html = $('<div class="text-box form-group row">

我尝试使用jquery验证,但我花了4个多小时搜索如何解决我的问题,但没有找到它。问题是,当我尝试在多维数组中使用jquery验证文件大小时,它不起作用。它仍然可以提交表单而不显示错误消息

这是我的领域

var numberIncr = 1;
        $('#add-berkas').click(function () {
            var box_html = $('<div class="text-box form-group row">\n' +
                '                        <div class="col-sm-8">\n' +
                '                            <input type="text" name="berkas['+numberIncr+'][nama]" placeholder="Nama File" class="form-control" required>\n' +
                '                        </div>\n' +
                '                        <div class="col-sm-4">\n' +
                '                            <input type="file" name="berkas['+numberIncr+'][file]" id="berkasfile'+numberIncr+'" accept="application/pdf" required/>\n' +
                '                            <button id="remove-berkas" class="btn btn-sm btn-danger remove-box" type="button"><i class="fa fa-trash"></i></button>\n' +
                '                        </div>\n' +
                '                    </div>');
            $('.text-box:last').after(box_html);
            box_html.fadeIn('slow');
            numberIncr++;
        });
var numberIncr=1;
$(“#添加berkas”)。单击(函数(){
var box_html=$('\n'+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
“\n”+
'                    ');
$('.text box:last')。在(box_html)之后;
box_html.fadeIn('slow');
numberIncr++;
});
这就是验证

        $.validator.addMethod('filesize', function (value, element, param) {
            return this.optional(element) || (element.files[0].size <= param)
        }, 'File size must be less than {0}');

        var berkas = $('input[name^="berkas"]');
        berkas.filter('input[name$="[file]"]').each(function() {
            $(this).rules("add", {
                extension: "pdf", filesize:1048576,
                messages: "Berkas must be PDF and less than 1MB"
            });
        });

        $("#form").validate({
            rules: {
                surat: {extension: "pdf", filesize: 1048576, },
            },
            messages: {
                surat: "Surat must be PDF and less than 1MB",
            },
            errorPlacement: function(error,element){
                showErrorMessage(error.text());
            },
            submitHandler: function(form) {
                form.submit();
            },
            highlight: function(element, errorClass) {
                return false;
            }
        });
$.validator.addMethod('filesize',函数(值、元素、参数){

返回此.optional(element)| |(element.files[0]。size您的问题可能是由于在页面加载时仅调用此代码一次,而字段尚不存在

berkas.filter('input[name$="[file]"]').each(function() {
    $(this).rules("add", {
        extension: "pdf", filesize:1048576,
        messages: "Berkas must be PDF and less than 1MB"
    });
});
调用此代码时没有匹配的字段。此方法的要点是在创建每个字段后动态添加规则

添加新字段后必须立即调用它。将其放入底部附近的
单击
处理程序中

var numberIncr = 1;
$('#add-berkas').click(function () {
    var box_html = $('<div class="text-box form-group row">\n' +
        .....
        '                    </div>');
    $('.text-box:last').after(box_html);
    box_html.fadeIn('slow');

    // add rules to new field here
    $('[name="berkas[' + numberIncr + '][file]"]').rules("add", {
        extension: "pdf", filesize:1048576,
        messages: "Berkas must be PDF and less than 1MB"
    });
    
    numberIncr++;
});
var numberIncr=1;
$(“#添加berkas”)。单击(函数(){
var box_html=$('\n'+
.....
'                    ');
$('.text box:last')。在(box_html)之后;
box_html.fadeIn('slow');
//在此处向新字段添加规则
$('[name=“berkas['+numberIncr+'][file]“]')。规则(“添加”{
扩展名:“pdf”,文件大小:1048576,
消息:“Berkas必须为PDF格式且小于1MB”
});
numberIncr++;
});

您不需要
.each()
,因为每次单击只创建一个字段。只需针对新字段并添加规则即可。

“不起作用”不够好。请编辑问题以清楚地描述问题以及任何疑难解答步骤。您是否查看DOM?哪个部分不起作用?我仍然可以提交表单,而文件大小超过1 MB@sparky您是否进行了任何疑难解答?您是否检查了DOM?为什么不向我们显示您的HTML标记?您的custom验证在它不是多维数组时工作?我明白了。因为我动态添加了它,所以规则也应该动态添加。非常感谢,它工作得很好!