Проверьте расширение файла и предупредите пользователя, если это не файл изображения, используя javascript

Когда я загружаю несколько изображений, и одно из них с недопустимым расширением и должно отображаться сообщение Тип файла недействителен, и когда я загружаю изображения одно за другим, все работает отлично, пожалуйста, помогите мне, как это решить? Спасибо

JavaScript

  $("input[type=file]").on('change', function(){
    
       //Get uploaded file extension
        var extension = $(this).val().split('.').pop().toLowerCase();
        // Create array with the files extensions that we wish to upload
        var validFileExtensions = ['jpeg', 'jpg', 'png'];
        //Check file extension in the array.if -1 that means the file extension is not in the list.
        if ($.inArray(extension, validFileExtensions) == -1) {
            $('#filetype').text("File type is not valid").show();
            $('#btnSubmit').prop('disabled', true);
        }
    
    });
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел "Заголовок" в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
Как React Helmet спасает меня при разделении файлов CSS?
Как React Helmet спасает меня при разделении файлов CSS?
Многие новички могут столкнуться с проблемой, когда одна страница с CSS наследует свойства от другой страницы с другим CSS. У меня было много проблем,...
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Руководство для начинающих по веб-разработке: HTML, CSS и JavaScript.
Руководство для начинающих по веб-разработке: HTML, CSS и JavaScript.
Добро пожаловать, мои коллеги по интернету, в захватывающий мир веб-разработки! Дорогие мои начинающие, я здесь, чтобы провести вас через основы HTML,...
0
0
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

const fileInput = document.querySelector('input[type = "file"]');
const submitBtn = document.querySelector('button[type = "submit"]');
 submitBtn.disabled = true;
    fileInput.addEventListener('change', () => {
      const fileName = fileInput.value;
      const fileType = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
      if (fileType !== 'jpg' && fileType !== 'jpeg' && fileType !== 'png' && fileType !== 'gif') {
        alert('File is not an image');
        fileInput.value = '';
        submitBtn.disabled = true; // Disable the submit button
  } else {
    submitBtn.disabled = false; // Enable the submit button
  }
  });
    .fileInput{
    text-align:center;
    margin-top:10%;
    }
    <div class = "fileInput">
    <input type = "file" id = "fileInput">
    <button type = "submit">Upload</button>
    </div>
Ответ принят как подходящий

С атрибутом multiple, добавленным в HTML-тег input, повторите свойство files элемента input в прослушивателе событий change.

document.addEventListener('DOMContentLoaded', function () {
    document.querySelector("input").addEventListener("change", changeHandler);
});

function changeHandler() {
    const validFileExtensions = ['jpeg', 'jpg', 'png'];
    // 'this' refers to the 'input' HTML element
    // Assigning 'this' to the 'element' variable is not 
    // necessary but assigned here for code readability.
    let element = this;
    // Check if the element has a FileList before checking each file
    if (element.files && element.files.length) {
        for (i = 0; i < element.files.length; i++) {
            const file = element.files[i];
            const filename = file.name;
            const extension = filename.split('.').pop();
            if (validFileExtensions.includes(extension)) {
                console.info("VALID file -> " + filename);
            }
            else {
                console.info("INVALID file -> " + filename);
            }
        }
    }
}
<input type = "file" multiple />

Применение приведенного выше кода к вашему коду jQuery:

$("input[type=file]").on('change', function() {

  //Get uploaded file extension
  var extension = $(this).val().split('.').pop().toLowerCase();
  // Create array with the files extensions that we wish to upload
  var validFileExtensions = ['jpeg', 'jpg', 'png'];
  //Check file extension in the array.if -1 that means the file extension is not in the list.
  if ($.inArray(extension, validFileExtensions) == -1) {
    $('#filetype').text("File type is not valid").show();
    $('#btnSubmit').prop('disabled', true);
  }
  // Check if the element has a FileList before checking each file
  if (this.files && this.files.length) {
    var message = "";
    for (i = 0; i < this.files.length; i++) {
      var file = this.files[i];
      var filename = file.name;
      var extension = filename.split('.').pop();
      if (!validFileExtensions.includes(extension)) {
        message += filename + " is not a valid file type. ";
      }
    }
    if (message !== "") {
      $('#filetype').text(message).show();
      $('#btnSubmit').prop('disabled', true);
    }
  }
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type = "file" id = "fileInput" multiple>
<span id = "filetype"></span>
<button type = "submit">Upload</button>

Другие вопросы по теме