Я хочу очистить файл ввода в моей форме.
Я знаю об установке источников для того же метода ... Но этот метод не сотрет выбранный путь к файлу.
Примечание : я хотел бы избежать перезагрузки страницы, сброса формы или выполнения вызова AJAX.
Это возможно?
javascript
html
thomaux
источник
источник
Есть 3 способа очистить ввод файла с помощью JavaScript:
установить значение свойства на пустое или нулевое.
Работает для IE11 + и других современных браузеров.
Создайте новый элемент ввода файла и замените старый.
Недостатком является то, что вы потеряете прослушиватели событий и расширенные свойства.
Сбросьте форму владельца с помощью метода form.reset ().
Чтобы не влиять на другие элементы ввода в той же форме владельца, мы можем создать новую пустую форму, добавить элемент ввода файла в эту новую форму и сбросить его. Этот способ работает для всех браузеров.
Я написал функцию JavaScript. демо: http://jsbin.com/muhipoye/1/
источник
tl; dr : для современных браузеров просто используйте
Старый ответ:
Как насчет:
Я все еще должен понять, почему это не работает с webkit .
В любом случае, это работает с IE9>, Firefox и Opera.
Ситуация с webkit такова, что я не могу изменить его обратно в файл.
С IE8 ситуация такова, что он выдает исключение безопасности.
Редактировать: Для webkit, Opera и Firefox это работает, хотя:
(проверьте приведенный выше ответ с этим предложением)
Я посмотрю, смогу ли я найти более чистый способ сделать этот кросс-браузер без GC.
Edit2:
Работает с большинством браузеров. Не работает с IE <9, вот и все.
Протестировано на Firefox 20, Chrome 24, Opera 12, IE7, IE8, IE9 и IE10.
источник
Установка значения в
''
не работает во всех браузерах.Вместо этого попробуйте установить значение
null
как:РЕДАКТИРОВАТЬ: Я получаю очень веские причины безопасности для того, чтобы не разрешать JS устанавливать ввод файла, однако представляется разумным предоставить простой механизм для очистки уже выбранного вывода. Я попытался использовать пустую строку, но она не работала во всех браузерах,
NULL
работала во всех браузерах, которые я пробовал (Opera, Chrome, FF, IE11 + и Safari).РЕДАКТИРОВАТЬ: Обратите внимание, что установка на
NULL
работает во всех браузерах, а установка на пустую строку не сделал.источник
all browsers
... это не работает в IE8, IE9 или IE10 (но работает в IE11).К сожалению, ни один из приведенных выше ответов, по-видимому, не охватывает все основы - по крайней мере, в моем тестировании с использованием vanilla javascript.
.value = null
похоже работает на FireFox, Chome, Opera и IE11 (но не IE8 / 9/10 ).cloneNode
(и.clone()
в jQuery) в FireFox, похоже, копирует.value
овер, поэтому делает клон бессмысленным.Итак, вот написанная мной функция vanilla javascript, которая работает в FireFox (27 и 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) ... это единственные доступные в настоящее время браузеры мне проверить с.
ctrl
Параметр является сам входной файл, так что функция будет называться ...источник
if
оператор не должен быть помещен вcatch
блок?null
. Не могли бы вы объяснить, какой смысл ставитьctrl.value = null;
внутриtry...catch
блока? Извините за новый вопрос.ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
- в какой момент мы на самом деле очищаем значение, посколькуcloneNode
также копируем его?РЕШЕНИЕ
Следующий код работал для меня с jQuery. Он работает в любом браузере и позволяет сохранять события и пользовательские свойства.
DEMO
Смотрите этот jsFiddle для кода и демонстрации.
ССЫЛКИ
Очистка <input type = 'file' /> с помощью jQuery
Как сбросить ввод файла с помощью JavaScript
источник
Вам нужно заменить его на новый файл ввода. Вот как это можно сделать с помощью jQuery:
и используйте эту строку, когда вам нужно очистить поле ввода (например, для какого-либо события):
источник
Изменить:
этот не работает в IE и опере, но, кажется, работает для Firefox, Safari и Chrome.
источник
У меня была такая же проблема, и я придумал это.
источник
Это на самом деле довольно просто.
источник
Я искал простой и понятный способ очистки ввода HTML-файла, приведенные выше ответы великолепны, но ни один из них на самом деле не отвечает на то, что я ищу, пока я не наткнулся в Интернете на простой и элегантный способ сделать это:
все заслуги перед Крисом Койером .
источник
Приведенные выше ответы предлагают несколько неуклюжих решений по следующим причинам:
Я не люблю, чтобы первый , а затем получить HTML - код, это очень запутанное и грязный.
wrap
input
Кросс-браузерный JS удобен, и кажется, что в этом случае слишком много неизвестных, чтобы надежно использовать
type
переключение (что опять-таки немного грязно) и установкуvalue
на''
Поэтому я предлагаю вам свое решение на основе jQuery:
Он делает то, что говорит, он заменяет входные данные своим клоном. У клона не будет выбранного файла.
Преимущества:
Результат: счастливый программист
источник
Cross browser compatibility
... мое тестирование показывает, что FireFox копирует.value
как часть.clone()
, поэтому делает его бесполезнымreplaceWith
? Я используюclone()
себя, и он отлично работает в Firefox (я не знаю, будет ли это до сих пор для вас год спустя =))Вот мои два цента, входные файлы хранятся в виде массива, так вот, как обнулить его
это возвращает пустой массив и работает во всех браузерах
источник
Мне помогло то, что я попытался извлечь и загрузить последний выбранный файл, используя цикл, вместо очистки очереди, и это сработало. Вот код
Надеюсь, это поможет некоторым.
источник
Я перепробовал большинство решений, но, похоже, никто не работал. Однако я нашел прогулку вокруг этого ниже.
Структура формы:
form
=>label
,input
иsubmit button
. После того, как мы выберем файл, имя файла будет показано надписью, сделав это вручную в JavaScript.Поэтому моя стратегия такова: изначально отправка
button
отключена, после выбора файлаdisabled
атрибут кнопки отправки будет удален, чтобы я мог отправить файл. После отправки я очищаю,label
что делает его похожим, я очищаю файлinput
но на самом деле это не так. Затем я снова отключу кнопку отправки, чтобы запретить отправку формы.Установив отправку
button
disable
или нет, я прекращаю отправку файла много раз, если не выберу другой файл.источник
Я изменил, чтобы напечатать текст и вернуться к типу в файл, используя setAttribute
источник
метод
input.value = null
является рабочим, однако он будет вызыватьchange
событие ввода только в случае вызова изonclick
события.Решением этой проблемы будет вызов этого
onchange
обработчика вручную всякий раз, когда вам нужно сбросить ввод.источник