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

标签 javascript jquery jquery-validate

我尝试使用 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++;
        });

这是验证

        $.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;
            }
        });

最佳答案

您的问题可能是由于当字段尚不存在时,可能仅在页面加载时调用此代码一次...

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

调用此代码时没有匹配的字段。此方法的全部意义在于让您动态在创建每个字段后添加规则。

您必须在添加新字段后立即调用它。将它放在底部附近的 click 处理程序中。

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

您不需要.each(),因为每次点击您只创建一个字段。只需定位新字段并添加规则。

关于javascript - JQuery动态验证多维数组中的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64663160/

相关文章:

jquery - 如何创建内容在滚动时发生变化的网站?

javascript - 我的服务没有更新 - Angularjs

javascript - 找不到用于排序/更改 <div> 结构的 Jquery 脚本,有什么想法吗?

javascript - 如何给Jquery函数添加高度和宽度

javascript - JQuery-DataTables-ColumnFilter 过滤问题

javascript - jQuery validate() 用于具有相同名称、不同值的单选按钮

javascript - 如何将多个表单数据值存储到本地存储中的单个键

jquery - 溢出时自动滚动到底部

JQuery Validator 在 Bootstrap Accordion 上取消突出显示

jquery - 验证 Bootstrap 4 时复选框下方出现错误消息