Поле типа file
, к сожалению, не реагирует на множество событий (размытие было бы прекрасно).Я вижу много людей, предлагающих change
-ориентированные решения, и их понижают.
change
действительно работает, но имеет большой недостаток (по сравнению с тем, что мы хотим, чтобы произошло).
При новой загрузке страницы, содержащей поле файла, откройте окно и нажмите «Отмена».Ничего, к сожалению, не меняет .
Что я решил сделать, так это загрузить в закрытом состоянии.
- Следующая часть формы
section#after-image
в моем случае скрыта от глаз.Когда мой file field
изменяется, отображается кнопка загрузки.При успешной загрузке отображается section#after-image
. - Если пользователь загружает, открывает диалоговое окно файла, а затем отменяет действие, они никогда не видят кнопку загрузки.
- Если пользователь выбирает файл, кнопка загрузки отображается.Если они затем откроют диалоговое окно и откажутся, событие
change
будет вызвано этой отменой, и там я смогу (и буду делать) скрывать кнопку загрузки до тех пор, пока не будет выбран правильный файл.
Мне повезло, что это закрытое состояние уже было дизайном моей формы.Вам не нужно использовать тот же стиль, просто сначала скрыв кнопку загрузки и после изменения, установив скрытое поле или переменную javascript в то, что вы можете отслеживать при отправке.
Я попытался изменить значение файлов [0] до того, как поле взаимодействовало с.Это ничего не сделало в отношении обмена.
Так что да, change
работает, по крайней мере, так хорошо, как мы собираемся получить.Поле файла защищено по понятным причинам, но к разочарованию благонамеренных разработчиков.
Это не соответствует моей цели, но вы можете onclick
загрузить предупреждение (неalert()
, потому что это останавливает обработку страницы), и скрыть его, если изменение инициируется и файлы [0] равны нулю.Если изменение не вызвано, div остается в своем состоянии.