Задать вопрос
@vealruk

Как сделать проверку на input type file с системой Drag and Drop?

Люди добрые помогите! все мозги сломал! Такое дело. есть скрипт на отправку файлов через drag and drop. мне надо сделать проверку на определенные типы файлов. при этом, чтобы выводило в лейбл для инпута имя файла. если формат файла не совпадает, то в лейбле появляется надпись "неверный формат". проверка работает для change, но не работает на drop. не понимаю в чем дело.

JS:

let dropArea = document.getElementById('modalForm');
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
    dropArea.addEventListener(eventName, preventDefaults, false)
})

function preventDefaults(e) {
    e.preventDefault()
    e.stopPropagation()
};
['dragenter', 'dragover'].forEach(eventName => {
    dropArea.addEventListener(eventName, highlight, false)
});
['dragleave', 'drop'].forEach(eventName => {
    dropArea.addEventListener(eventName, unhighlight, false)
})

function highlight(e) {
    dropArea.classList.add('dragover')
}

function unhighlight(e) {
    dropArea.classList.remove('dragover')
}

dropArea.addEventListener('drop', handleDrop, false)

function handleDrop(e) {
    let dt = e.dataTransfer
    let files = dt.files
    handleFiles(files)
}

function handleFiles(files) {
    files = [...files]
}

dropArea.addEventListener('change', function (e) {
    let url = dropArea.getAttribute('action');
    var xhr = new XMLHttpRequest();
    var formData = new FormData();
    let fileName = $("input[type=file]").val().replace(/.*\\/, "");
    let fileExt = fileName.split('.').pop();
    xhr.open('POST', url, true);
    xhr.addEventListener('readystatechange', function (e) {
        if (xhr.readyState == 4 && xhr.status == 200 && fileExt == 'doc' || fileExt == 'docx' || fileExt == 'pdf') {
            $(".modal__input").text(fileName);
            $('#btnSubmit').prop("disabled", false); 
        } else if (xhr.readyState == 4 && xhr.status != 200 && fileExt !== 'doc' || fileExt !== 'docx' || fileExt !== 'pdf') {
            $('.modal__input').text("Неверный формат!");
        };
    });
    formData.append('file', file);
    xhr.send(formData);
});

dropArea.addEventListener('drop', function (e) {
    let url = dropArea.getAttribute('action');
    var xhr = new XMLHttpRequest();
    var formData = new FormData();
    let fileName = $("input[type=file]").val().replace(/.*\\/, "");
    let fileExt = fileName.split('.').pop();
    xhr.open('POST', url, true);
    xhr.addEventListener('readystatechange', function (e) {
        if (xhr.readyState == 4 && xhr.status == 200 && (fileExt == 'doc' || fileExt == 'docx' || fileExt == 'pdf')) {
            $(".modal__input").text(fileName);
            $('#btnSubmit').prop("disabled", false); 
        } else if (xhr.readyState == 4 && xhr.status != 200 && (fileExt !== 'doc' || fileExt !== 'docx' || fileExt !== 'pdf')) {
            $('.modal__input').text("Неверный формат!");
        };
    });
    formData.append('file', file);
    xhr.send(formData);
});


HTML:

<form enctype="multipart/form-data" class="modal__form" id="modalForm" action="send/" method="post">
				<h1 id="title" class="modal__title">Сопроводительное письмо</h1>
				<input id="textarea" class="modal__textarea" required>
				<h2 class="modal__subtitle">Загрузите резюме</h2>
				<div class="modal__input-wrapper">
					<input style="display: none;" id="file" type="file" onchange="handleFiles(this.files)" accept=".doc, .docx, .pdf">
					<label class="modal__input" for="file">Выберите файл</label>
					<span>или перетащите его сюда</span>
				</div>
				<button id="btnSubmit" class="btn" disabled>Откликнуться</button>
			</form>
  • Вопрос задан
  • 220 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы