HTML <input type = 'file'> Подія вибору файлів


144

Скажімо, у нас цей код:

<form action='' method='POST' enctype='multipart/form-data'>
    <input type='file' name='userFile'><br>
    <input type='submit' name='upload_btn' value='upload'>
</form>

що призводить до цього:

зображення, яке відображає кнопку перегляду та завантаження

Коли користувач натискає кнопку "Переглянути ...", відкриється діалогове вікно пошуку файлів:

зображення, що показує діалогове вікно пошуку файлів із вибраним файлом

Користувач вибере файл або двічі клацнувши по файлу, або натиснувши кнопку «Відкрити».

Чи є подія Javascript, про яку я можу отримувати сповіщення після вибору файлу?


5
Що за фанк старий інтерфейс Windows!
Ель-

@ El-Burritos це було розміщено в 2010 році; звичайно, це старий інтерфейс Windows: D
Саймон Чен

Відповіді:


181

Прослухайте подію зміни.

input.onchange = function(e) { 
  ..
};

3
ми напишемо його куди .. у тегах сценарію javascript
Місяць,

5
так, у тегах сценарію, або ви можете додати його як атрибут ( <input type="file" onchange="..." />), хоча це не рекомендується.
Анураг

7
Зауважте, що в IE7 та 8, що подія "зміни" не перетворюється на подію форми. Потрібно поставити слухача на тег <input>.
xer0x

36
Що робити, якщо користувачеві потрібно "перезавантажити" файл? onchange не запустить, але він все одно повинен перезавантажуватися так, ніби він завантажував його вперше.
bryc

11
Зауважте, це не працює, якщо користувач вибирає один і той же файл більше одного разу поспіль, оскільки файл не змінювався.
bob0the0mighty

45

Коли вам доведеться перезавантажити файл, ви можете стерти значення вводу. Наступного разу, коли ви додасте файл, стартує подія "на зміну".

document.getElementById('my_input').value = null;
// ^ that just erase the file path but do the trick

5
Це добре, але будьте в курсі дивної поведінки IE <11. Це не дозволяє змінити значення вводу, тому, швидше за все, вам знадобиться вирішення проблеми. stackoverflow.com/questions/9011644/…
Олександр Ткаленко


3

Подія Змінити називається, навіть якщо натиснути кнопку Скасувати.


2
це допоможе, якщо ви надасте якийсь код, щоб пояснити свою відповідь, оскільки в фрагменті коду запитань не вказано жодної події зміни
DevDig

Я думаю, що @anthony має на увазі такий сценарій: Виберіть файл. Тепер знову відкрийте селектор файлів, але цього разу натисніть Скасувати. Оскільки вдруге не було обрано жодного файлу, керування введенням файлу скидається, таким чином змінюючи його початковий вибір, і подія зміни запускається.
dvlsc

Я спробував це на Chrome 83, і подія не звільняється, коли натискаю кнопку Скасувати. Ця відповідь досить стара, і, мабуть, її треба було виправити, принаймні, на Chrome.
Саїд Ахадіан

3

Ось так я це зробив із чистим JS:

var files = document.getElementById('filePoster');
var submit = document.getElementById('submitFiles');
var warning = document.getElementById('warning');
files.addEventListener("change", function () {
  if (files.files.length > 10) {
    submit.disabled = true;
    warning.classList += "warn"
    return;
  }
  submit.disabled = false;
});
#warning {
    text-align: center;
}

#warning.warn {
	color: red;
	transform: scale(1.5);
	transition: 1s all;
}
<section id="shortcode-5" class="shortcode-5 pb-50">
    <p id="warning">Please do not upload more than 10 images at once.</p>
    <form class="imagePoster" enctype="multipart/form-data" action="/gallery/imagePoster" method="post">
        <div class="input-group">
  	    <input id="filePoster" type="file" class="form-control" name="photo" required="required" multiple="multiple" />
	    <button id="submitFiles" class="btn btn-primary" type="submit" name="button">Submit</button>
        </div>
    </form>
</section>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.