Вы можете попробовать использовать что-то вроде HTML Tidy , чтобы очистить любой «сломанный» HTML и преобразовать HTML в XHTML, который затем можно разобрать с помощью парсера XML.
Как удалить этот узел, создав новый с тем же именем?
Установка значения ''
не работает во всех браузерах.
Вместо этого попробуйте установить значение на null
следующим образом:
document.getElementById('your_input_id').value= null;
EDIT: я получаю очень обоснованные причины безопасности, которые не позволяют JS устанавливать входной файл, однако представляется разумным предоставить простой механизм для очистки уже выбора вывода. Я попытался использовать пустую строку, но она не работала во всех браузерах, NULL
работал во всех браузерах, которые я пробовал (Opera, Chrome, FF, IE11 + и Safari).
EDIT: Обратите внимание, что настройка NULL
работает во всех браузерах при установке на пустую строку.
Как насчет:
input.type = "text";
input.type = "file";
Мне все еще нужно понять, почему это не работает с webkit.
В любом случае, это работает с IE9>, Firefox и Opera. Ситуация с webkit заключается в том, что я, похоже, не могу изменить ее обратно в файл. В IE8 ситуация заключается в том, что она выдает исключение безопасности.
Изменить: для webkit, Opera и firefox это работает, хотя:
input.value = '';
(проверьте выше ответ с этим предложением)
Я посмотрю если я могу найти более чистый способ сделать этот кросс-браузер без необходимости использования GC.
Edit2:
try{
inputs[i].value = '';
if(inputs[i].value){
inputs[i].type = "text";
inputs[i].type = "file";
}
}catch(e){}
Работает с большинством браузеров. Не работает с IE & lt; 9, вот и все. Протестировано на firefox 20, chrome 24, opera 12, IE7, IE8, IE9 и IE10.
Я искал простой и чистый способ очистки ввода HTML-файла, эти ответы являются замечательными, но ни один из них не отвечает на то, что я ищу, пока я не столкнулся в Интернете с простым элегантным способом сделайте это:
var $input = $("#control");
$input.replaceWith($input.val('').clone(true));
все кредиты идут на Chris Coyier .
// Referneces
var control = $("#control"),
clearBn = $("#clear");
// Setup the clear functionality
clearBn.on("click", function(){
control.replaceWith( control.val('').clone( true ) );
});
// Some bound handlers to preserve when cloning
control.on({
change: function(){ console.log( "Changed" ) },
focus: function(){ console.log( "Focus" ) }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="control">
<br><br>
<a href="#" id="clear">Clear</a>
Следующий код работал для меня с jQuery. Он работает в каждом браузере и позволяет сохранять события и настраиваемые свойства.
var $el = $('#your-input-id');
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();
См. этот jsFiddle для кода и демонстрации.
Существует 3 способа очистки ввода файла с помощью javascript:
Я написал функцию javascript. demo: http://jsbin.com/muhipoye/1/
function clearInputFile(f){
if(f.value){
try{
f.value = ''; //for IE11, latest Chrome/Firefox/Opera...
}catch(err){ }
if(f.value){ //for IE5 ~ IE10
var form = document.createElement('form'),
parentNode = f.parentNode, ref = f.nextSibling;
form.appendChild(f);
form.reset();
parentNode.insertBefore(f,ref);
}
}
}
Что мне помогло, я попытался извлечь и загрузить последний выбранный файл, используя цикл, вместо того, чтобы очищать очередь, и это сработало. Вот код.
for (int i = 0; i <= Request.Files.Count-1; i++)
{
HttpPostedFileBase uploadfile = files[i];
Stream fs = uploadfile.InputStream;
BinaryReader br = new BinaryReader(fs);
Byte[] imageBytes = br.ReadBytes((Int32)fs.Length);
}
Надеюсь, это может помочь некоторым.
К сожалению, ни один из вышеперечисленных ответов не охватывает все базы - по крайней мере, не с моим тестированием с помощью javascript с vanilla.
.value = null
, похоже, работает с FireFox, Chome, Opera и IE11 (но не IE8 / 9/10) .cloneNode
(и .clone()
в jQuery) на FireFox, похоже, скопирует .value
, поэтому делает клон бессмысленным. Итак, вот функция javascript vanilla, которую я написал, которая работает на FireFox (27 и 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) ... это которые доступны мне для проверки.
function clearFileInput(ctrl) {
try {
ctrl.value = null;
} catch(ex) { }
if (ctrl.value) {
ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
}
}
Параметр ctrl
- это сам файл, поэтому функция будет вызываться как ...
clearFileInput(document.getElementById("myFileInput"));
U нужно заменить его новым вводом файла. Вот как это можно сделать с помощью jQuery:
var inputFile = $('input[type=field]');
inputFile.wrap('<div />');
и использовать эту строку, когда вам нужно очистить поле ввода (например, на каком-либо событии):
inputFile.parent().html( inputFile.parent().html() );
Вышеупомянутые ответы предлагают несколько неуклюжие решения по следующим причинам:
wrap
input
, а затем получать html, он очень вовлечен и грязный. type
(что опять-таки немного грязно) и установки value
на ''
Итак, я предлагаю вам решение на основе jQuery:
$('#myinput').replaceWith($('#myinput').clone())
Он делает то, что он говорит, он заменяет ввод самим клоном.
Преимущества:
Результат: Счастливый программист
document.getElementById('your_input_id').value=''
Изменить: этот не работает в IE и опера, но, похоже, работает для firefox, safari и chrome.