Я хочу запускать событие, когда пользователь выбирает файл. Это .change
сработает, если пользователь каждый раз меняет файл.
Но я хочу запустить событие, если пользователь снова выберет тот же файл.
- Файл, выбранный пользователем
A.jpg
(срабатывает событие) - Файл, выбранный пользователем
B.jpg
(срабатывает событие) - Файл, выбранный пользователем
B.jpg
(событие не срабатывает, я хочу, чтобы он сработал)
Как мне это сделать?
jquery
html
events
cross-browser
Gadonski
источник
источник
.attr("value", "")
или.val("")
(как предлагает @ wagner-leonardi ниже), Internet Explorer.prop("value", "")
Если вы пробовали
.attr("value", "")
и не работали, не паникуйте (как я)просто сделай
.val("")
вместо этого, и все будет нормальноисточник
Вы можете просто обнулить путь к файлу каждый раз, когда пользователь нажимает на элемент управления. Теперь, даже если пользователь выберет тот же файл, будет запущено событие onchange .
источник
Используйте событие onClick, чтобы очищать значение целевого ввода каждый раз, когда пользователь нажимает на поле. Это гарантирует, что событие onChange будет запущено и для того же файла. Сработало у меня :)
Использование TypeScript
источник
Я заставил это работать, очистив входное значение файла onClick, а затем разместив файл onChange. Это позволяет пользователю выбирать один и тот же файл дважды подряд и при этом сохранять событие изменения для отправки на сервер. В моем примере используется плагин формы jQuery .
источник
onClick
срабатывает раньшеonChange
, поэтому этот метод отлично подходит для меня.Эта работа для меня
источник
Решение VueJs
источник
Вдохновленный @braitsch, я использовал в своем AngularJS2 следующее
input-file-component
Вот и
onClick(event)
спасли меня :-)источник
Вот найденное мной решение React-y, которое сработало для меня:
onClick={event => event.target.value = null}
источник
Вероятно, самое простое, что вы можете сделать, - это установить значение пустой строки. Это заставляет его «изменять» файл каждый раз, даже если тот же файл выбирается снова.
<input type="file" value="" />
источник
Если вы не хотите использовать jQuery
Он отлично работает в Firefox, но для Chrome вам нужно добавить
this.value=null;
после предупреждения.источник
По умолчанию свойство value элемента ввода очищается после выбора файлов, если вход имеет несколько атрибутов. Если вы не очистите это свойство, событие «изменение» не будет запущено, если вы выберете тот же файл. Вы можете управлять этим поведением с помощью
multiple
атрибута.Ссылка
источник
Здесь нельзя развести
change
огонь (правильное поведение, так как ничего не изменилось). Тем не менее, вы также можете связатьclick
... хотя это может срабатывать слишком часто ... хотя между ними не так много золотой середины.источник
.click()
не «стреляете при повторном выборе».click
это как можно ближе.Создайте для входа событие щелчка и событие изменения. Событие щелчка очищает ввод, а событие изменения содержит код, который вы хотите выполнить.
Таким образом, событие щелчка будет пустым, когда вы нажмете кнопку ввода (до того, как откроются окна выбора файла), поэтому событие изменения всегда будет срабатывать, когда вы выбираете файл.
источник
Вы можете использовать,
form.reset()
чтобы очистить список входных файловfiles
. Это сбросит все поля до значений по умолчанию, но во многих случаях вы можете использовать только input type = 'file' в форме для загрузки файлов. В этом решении нет необходимости клонировать элемент и повторно перехватывать события.Спасибо philiplehmann
источник
Я столкнулся с той же проблемой, я просмотрел решения выше, но они не получили хорошего объяснения того, что на самом деле происходит.
Это решение я написал https://jsfiddle.net/r2wjp6u8/ , не делает много изменений в дереве DOM, оно просто меняет значения поля ввода. С точки зрения производительности он должен быть немного лучше.
Ссылка на скрипку: https://jsfiddle.net/r2wjp6u8/
источник
Таким образом, невозможно на 100% быть уверенным, что они выбирают один и тот же файл, если вы не сохраните каждый файл и не сравните их программно.
Способ взаимодействия с файлами (что делает JS, когда пользователь «загружает» файл) - это HTML5 File API и JS FileReader .
https://www.html5rocks.com/en/tutorials/file/dndfiles/
https://scotch.io/tutorials/use-the-html5-file-api-to-work-with-files-locally-in-the-browser
В этих руководствах показано, как записывать и читать метаданные (хранящиеся как объект js) при загрузке файла.
Создайте функцию, которая запускает onChange, которая будет читать-> хранить-> сравнивать метаданные текущего файла с предыдущими файлами. Затем вы можете инициировать свое событие, когда выбран нужный файл.
источник
Поверьте, это вам точно поможет!
Надеюсь, это поможет многим из вас, ребята.
источник