Javascript JQuery动态验证多维数组中的文件大小
我尝试使用jquery验证,但我花了4个多小时搜索如何解决我的问题,但没有找到它。问题是,当我尝试在多维数组中使用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">
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验证在它不是多维数组时工作?我明白了。因为我动态添加了它,所以规则也应该动态添加。非常感谢,它工作得很好!