У меня возникли проблемы при попытке проверить, возвращает ли функция false.
Я пишу сценарий для загрузки файла изображения, когда пользователь выбирает файл в поле формы ввода.
Итак, форма html выглядит следующим образом:
<form enctype="multipart/form-data" id="upload-form" role="form">
<input type="hidden" id="register-id" name="id" value="">
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Select image</label>
<div class="custom-file">
<input type="file" name="filedata" class="custom-file-input" id="picture" accept="image/*">
<label class="custom-file-label" for="picture">Choose file</label>
</div>
</div>
<div class="progress mb-2 progress-sm">
<div id="file-progress-bar" class="progress-bar" role="progressbar" style="width: 0%;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
</div>
</form>
Код javascript для получения файла при изменении ввода следующий, код должен запускать некоторую проверку файла
$('#picture').on('change', function() {
let picture = this.files[0];
if(!checkFile(picture)) {
alert("Check file not passed");
return false;
}
});
Проблема: сценарий останавливает выполнение и отображает предупреждающее сообщение «Проверить файл не прошел», даже если вызываемая функция checkFile не возвращает fasle, поскольку файл прошел все проверки. В чем дело? Большое спасибо.
Под функцией checkFile
function checkFile(picture) {
let imagetype = picture.type;
console.log('Picture type ' + imagetype);
let match= ["image/jpeg","image/png","image/jpg"];
if(!((imagetype==match[0]) || (imagetype==match[1]) || (imagetype==match[2])))
{
console.log('Matching picture type failed');
return false;
}
let reg=/(.jpg|.gif|.png)$/;
console.log('Picture name is ' + picture.name);
if (!reg.test(picture.name)) {
console.log('Check picture name failed');
return false;
}
console.log('Picture size is ' + picture.size);
if (picture.size > 204800) {
console.log('Check picture size failed');
return false;
}
}
Есть ли лучшая стратегия для проверки файла перед загрузкой?
Большое спасибо за любой отзыв