Проверить, возвращает ли функция false в jQuery - PullRequest
0 голосов
/ 17 июня 2020

У меня возникли проблемы при попытке проверить, возвращает ли функция 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;
    }
}

Есть ли лучшая стратегия для проверки файла перед загрузкой?

Большое спасибо за любой отзыв

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы забыли вернуть истину, когда все проверки пройдены.

function checkFile(picture) {
    [...previousLines]

    return true;
}
1 голос
/ 17 июня 2020

Просто верните true в конце вашей функции. Если вы ничего не вернете из функции, она вернет undefined, которое является ложным значением.

function checkFile(picture) {
  let imagetype = picture.type;

  // ... rest of the code

  if (picture.size > 204800) {
    console.log('Check picture size failed');
    return false;
  }
  return true;
}

Или вы можете изменить условие, чтобы оно точно соответствовало false

if(checkFile(picture) === false) {
  alert("Check file not passed");
  return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...