【问题标题】:JQuery Validate Filesize in Multidimensional Array DynamicallyJQuery动态验证多维数组中的文件大小
【发布时间】:2020-11-03 12:48:05
【问题描述】:

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

这是我的领域

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

【问题讨论】:

  • “不起作用” 不够好。请编辑问题以清楚地描述问题以及任何故障排除步骤。你看过 DOM 吗?哪个部分不工作?
  • 我仍然可以提交表单,而文件大小超过 1 MB @Sparky
  • 您是否进行了故障排除?你检查过你的 DOM 吗?为什么您没有向我们展示您的 HTML 标记?当它不是多维数组时,您的自定义验证是否有效?

标签: javascript jquery jquery-validate


【解决方案1】:

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

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(),因为每次点击只需创建一个字段。只需定位新字段并添加规则即可。

【讨论】:

  • 我明白了。因为我是动态添加的,所以规则也应该动态添加。非常感谢,它有效!
猜你喜欢
  • 2019-02-10
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多