Можно ли очистить <input type='file' />
управляющее значение с помощью jQuery? Я пробовал следующее:
$('#control').attr({ value: '' });
Но это не работает.
Легко: вы оборачиваете <form>
элемент, вызываете reset на форме, затем удаляете форму, используя .unwrap()
. В отличие от других .clone()
решений в этом потоке, в конце вы получите один и тот же элемент (включая настраиваемые свойства, установленные для него).
Протестировано и работает в Opera, Firefox, Safari, Chrome и IE6 +. Также работает с другими типами элементов формы, за исключением type="hidden"
.
window.reset = function(e) {
e.wrap('<form>').closest('form').get(0).reset();
e.unwrap();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input id="file" type="file">
<br>
<input id="text" type="text" value="Original">
</form>
<button onclick="reset($('#file'))">Reset file</button>
<button onclick="reset($('#text'))">Reset text</button>
Как отмечает Тимо ниже, если у вас есть кнопки для запуска сброса поля внутри <form>
, вы должны вызвать .preventDefault()
событие, чтобы предотвратить <button>
запуск отправки.
Не работает в IE 11 из-за нефиксированной ошибки. Текст (имя файла) очищается на входе, но его File
список остается заполненным.
reset()
например, в.reset2()
потому что по крайней мере в Chrome все поля очищаются, если это такreset()
. И добавьте event.preventDefault () после очистки вызова, чтобы предотвратить отправку. Таким образом:<button onclick="reset2($('#file'));event.preventDefault()">Reset file</button>
. Рабочий пример: jsfiddle.net/rPaZQ/23 .Быстрый ответ: замени его.
В приведенном ниже коде я использую
replaceWith
метод jQuery, чтобы заменить элемент управления своим клоном. Если у вас есть какие-либо обработчики, связанные с событиями в этом элементе управления, мы также хотим сохранить их. Для этого мы передаем вtrue
качестве первого параметраclone
метода.Скрипка: http://jsfiddle.net/jonathansampson/dAQVM/
Если при клонировании при сохранении обработчиков событий возникают проблемы, которые вы могли бы рассмотреть, используя делегирование событий для обработки кликов по этому элементу управления из родительского элемента:
Это предотвращает необходимость клонирования любых обработчиков вместе с элементом при обновлении элемента управления.
источник
input.value = null;
Предполагается, что Jquery позаботится о проблемах между браузерами и браузерами.
Это работает на современных браузерах, которые я тестировал: Chromium v25, Firefox v20, Opera v12.14
Использование jquery 1.9.1
HTML
Jquery
На jsfiddle
Следующее решение javascript также работало для меня в браузерах, упомянутых выше.
На jsfiddle
У меня нет способа проверить с IE, но теоретически это должно работать. Если IE отличается настолько, что версия Javascript не работает, потому что MS сделала это по-другому, метод jquery должен, на мой взгляд, решить эту проблему за вас, иначе стоило бы указать это команде jquery вместе с метод, который требуется IE. (Я вижу людей, которые говорят «это не сработает в IE», но нет ванильного javascript, чтобы показать, как он работает в IE (предположительно, «функция безопасности»?)), Возможно, сообщите об этом также как об ошибке в MS (если они посчитайте это так), чтобы он исправлялся в любом новом выпуске)
Как упомянуто в другом ответе, сообщении на форуме jquery
Но jquery теперь удалил поддержку тестирования браузера, jquery.browser.
Это решение javascript также сработало для меня, оно является ванильным эквивалентом метода jquery.replaceWith .
На jsfiddle
Важно отметить, что метод cloneNode не сохраняет связанные обработчики событий.
Смотрите этот пример.
На jsfiddle
Но jquery.clone предлагает это [* 1]
На jsfiddle
[* 1] jquery может сделать это, если события были добавлены методами jquery, поскольку он хранит копию в jquery.data , в противном случае он не работает, поэтому это немного обманывает / обходной путь и означает, что вещи не совместимы между различными методами или библиотеками.
На jsfiddle
Вы не можете получить прикрепленный обработчик событий непосредственно от самого элемента.
Вот общий принцип в vanilla javascript, это то, как jquery делают все остальные библиотеки (примерно).
На jsfiddle
Конечно, jquery и другие библиотеки имеют все другие методы поддержки, необходимые для поддержки такого списка, это просто демонстрация.
источник
.val('')
. Разве это не проще, чем клонирование элемента загрузки или добавление вложенной формы? +1..val("")
) работало отлично, спасибо. Намного проще, чем клонировать ввод и заменить его тоже.По очевидным причинам безопасности вы не можете установить значение для ввода файла, даже для пустой строки.
Все, что вам нужно сделать, это сбросить форму, где поле или если вы хотите только сбросить ввод файла формы, содержащей другие поля, используйте это:
Вот пример: http://jsfiddle.net/v2SZJ/1/
источник
Это работает для меня.
http://forum.jquery.com/topic/how-to-clear-a-file-input-in-ie
Надеюсь, поможет.
источник
В IE8 они сделали поле загрузки файла доступным только для чтения для безопасности. Смотрите сообщение в блоге команды IE :
источник
$("#control").val('')
это все, что тебе нужно! Протестировано на Chrome с использованием JQuery 1.11Другие пользователи также протестировали в Firefox.
источник
Я застрял со всеми вариантами здесь. Вот взлом, который я сделал, который работал:
и вы можете запустить сброс, используя jQuery с кодом, подобным следующему:
(jsfiddle: http://jsfiddle.net/eCbd6/ )
источник
Я закончил с этим:
возможно, не самое элегантное решение, но оно работает, насколько я могу судить.
источник
Я использовал https://github.com/malsup/form/blob/master/jquery.form.js , у которого есть вызываемая функция
clearInputs()
, которая является кроссбраузерной, хорошо протестирована, проста в использовании и обрабатывает также проблемы с IE и очистку скрытых полей. если нужно. Может быть, немного длинное решение, чтобы очистить только ввод файла, но если вы имеете дело с загрузкой файлов через браузер, то это решение рекомендуется.Использование легко:
источник
Значение файловых входов доступно только для чтения (по соображениям безопасности). Вы не можете очистить его программно (кроме вызова метода reset () формы, которая имеет более широкую область действия, чем просто это поле).
источник
Я смог заставить мой работать со следующим кодом:
источник
Я искал простой и понятный способ очистки ввода HTML-файла, приведенные выше ответы великолепны, но ни один из них действительно не отвечает на то, что я ищу, пока я не наткнулся в Интернете на простой и элегантный способ сделать это:
все дело в Крисе Койере .
источник
Эта
.clone()
вещь не работает в Опере (и, возможно, другие). Содержит содержание.Самым близким методом для меня здесь был ранее Джонатан, однако в моем случае было гарантировано, что поле сохранило свое имя, классы и т. Д. Для грязного кода.
Примерно так может сработать (спасибо Квентину тоже):
источник
Мне удалось заставить это работать, используя следующее ...
Это было проверено в IE10, FF, Chrome & Opera.
Есть две оговорки ...
По-прежнему не работает должным образом в FF, если вы обновите страницу, элемент файла будет заново заполнен выбранным файлом. Откуда она получает эту информацию, мне не под силу. Что еще может быть связано с элементом ввода файла?
Не забудьте использовать делегирование для любых событий, которые вы прикрепили к элементу ввода файла, чтобы они работали даже после создания клона.
Что я не понимаю, так это то, что кто-то подумал, что не позволяя вам очистить поле ввода от недопустимого недопустимого выбора файла, было хорошей идеей?
Хорошо, не позволяйте мне динамически устанавливать его со значением, чтобы я не мог вытащить файлы из ОС пользователя, но позвольте мне очистить неправильный выбор без сброса всей формы.
Это не значит, что 'accept' делает что-либо, кроме фильтра, в любом случае, а в IE10 он даже не понимает типы пантомимы MS Word, это шутка!
источник
.pop()
массив файлов вместо того, чтобы устанавливать его в null. похоже, это правильно очищает файл.На моем Firefox 40.0.3 работает только с этим
источник
это работает для меня в любом браузере.
источник
Я пробовал большинство методов, упомянутых пользователями, но ни один из них не работал во всех браузерах. то есть: clone () не работает в FF для ввода файлов. В итоге я вручную скопировал входной файл, а затем заменил оригинал скопированным. Работает во всех браузерах.
источник
источник
Это работает с Chrome, FF и Safari
Может не работать с IE или Opera
источник
Сделайте его асинхронным и сбросьте его после того, как нужные действия кнопки были выполнены.
источник
источник
у меня не работает:
поэтому в asp mvc я использую бритвенные функции для замены файлового ввода. сначала создайте переменную для входной строки с Id и Name, а затем используйте ее для отображения на странице и замены при нажатии кнопки сброса:
источник
Самый простой способ - изменить тип входа и снова изменить его.
Что-то вроде этого:
источник
Вы можете заменить его своим клоном так
Но это клоны со своей ценностью тоже, чтобы вы лучше так
источник
Это легко, lol (работает во всех браузерах [кроме оперы]):
JS Fiddle: http://jsfiddle.net/cw84x/1/
источник
Какая? В вашей функции проверки просто поместите
Предполагается, что загрузка это имя:
Я использую JSP, не уверен, что это имеет значение ...
У меня работает, и я думаю, что это намного проще.
источник