Как очистить предыдущий файл от "типа ввода" в HTML5 FileReader
У меня есть файл-ввод:
<img id="uploadPreview">
<div id="changeImage">Change</div>
<div id="customImage">
<input type="file" id="myfile" multiple style="display:none" onchange="PreviewImage();" />
<div class='upload blank' id="add-image"></div>
</div>
Функция выглядит следующим образом:
var oFReader = new FileReader();
oFReader.readAsDataURL(document.getElementById("myfile").files[0]);
oFReader.onload = function (oFREvent) {
document.getElementById("uploadPreview").src = oFREvent.target.result;
};
function PreviewImage() {
var oFReader = new FileReader();
oFReader.readAsDataURL(document.getElementById("myfile").files[0]);
$("#uploadPreview").removeClass('hide'); //for manipulating something in the dom
$('#changeImage').removeClass('hide'); //for manipulating something in the dom
$("#customImage").addClass('hide'); //these are for manipulating something in the dom
oFReader.onload = function (oFREvent) {
document.getElementById("uploadPreview").src = oFREvent.target.result;
};
};
Все работает отлично. Теперь у меня есть кнопка "Изменить". Я хочу, чтобы кто-то нажимал на него, а затем загружал ранее загруженные данные файла. Функция выглядит примерно так:
$('#changeImage').click(function(){
$('#uploadPreview').addClass('hide');
$('#customImage').removeClass('hide');
//here I want to remove/clear the details about the already previous uploaded file in the 'file-input'. So the same image can be shown if someone clicks it for once again.
});
Вы можете помочь в этом?
Ответы
Ответ 1
Если вы поместили свой файл в тег <form>
, вы можете использовать встроенный метод .reset()
.
HTML:
<img id="uploadPreview">
<div id="changeImage">Change</div>
<div id="customImage">
<form id="fileform">
<input type="file" id="myfile" multiple style="display:none" onchange="PreviewImage();" />
</form>
<div class='upload blank' id="add-image"></div>
</div>
JS:
$('#changeImage').click(function(){
$('#uploadPreview').addClass('hide');
$('#customImage').removeClass('hide');
// Reset the form
$("#fileform")[0].reset();
});
JS без jQuery:
var resetButton = document.getElementById('resetButton');
var fileInput = document.getElementById('fileInput');
var form = document.getElementById('form');
resetButton.addEventListener('click', function () {
// resetting the file input only
fileInput.value = null;
// alternatively: resetting the entire form (works in older browsers too)
form.reset();
});
Ответ 2
Если вы хотите сохранить данные в других полях формы, вы можете использовать
HTML
<input type='file' id='yourid' />
JQuery
$('#yourid').val('');
это очистит ваш загруженный файл от тега ввода
Ответ 3
В React
я столкнулся с этой проблемой при вводе файлов в браузерах на основе Chrome. Я исправил это с помощью комбинации value=""
и autoComplete={"new-password"}
<input
value=""
type="file"
autoComplete={"new-password"}
onChange={e => pickHandler(e)}
/>