Как вы устанавливаете входной файл ничего с JavaScript или HTML?
На сайте, который я разрабатываю, у меня есть файл, который пользователи могут загружать. Он использует "Ajax" (на самом деле), чтобы отправить файл в файл php, привязанный к iframe. Мой вопрос в том, что Firefox автоматически заполняет элемент ввода файла. Есть ли способ предоставить пользователям возможность нажатия кнопки отправки без отправки файла? Или я устанавливаю значение файла как-то как-то и проверяю его в файле php? Мой код выглядит следующим образом:
Name: <input type='text' id='name'><br>
Description: <textarea id='description' rows=10 columns=100></textarea><br>
<form id="upload_form" method="post" enctype="multipart/form-data" action="uploadfile.php">
<input type='hidden' value='' id='descriptionid' name='descriptionid'>
<input type='file' name="file" id="file" size="27" value="">
<input type='submit' value='Submit' onclick=';' id='submitPopup'>
</form>
При нажатии кнопки выполняется JavaScript-метод и получает значения имени и описания, а также отправляется форма ввода. Как разрешить пользователям загружать файлы и не загружать их автоматически в браузере?
Ответы
Ответ 1
В качестве меры безопасности чтение или установка значения поля ввода file
не допускается. Однако, если вы вызываете form.reset()
, который очистит его для вас.
Вы можете даже пропустить все остальные входы, вспомнить их значение, reset форму, а затем пополнить остальные входы, поэтому очищаются только file
.
Ответ 2
В целях безопасности вы не можете вводить данные вручную или JavaScript в файле типа ввода.
Ответ 3
Я ответил на этот вопрос в другой теме: как очистить входной файл с помощью javascript?
Там 3 способа очистки ввода файла с помощью javascript:
-
значение свойства set равно пустому или нулевому.
Работает для IE11 + и других современных браузеров.
-
Создайте новый элемент ввода файла и замените старый.
Недостатком является то, что вы потеряете прослушиватели событий и свойства expando.
-
Reset форма владельца с помощью метода form.reset().
Чтобы избежать влияния на другие элементы ввода в одной и той же форме владельца, мы можем создать новую пустую форму и добавить элемент ввода файла в эту новую форму и reset. Этот способ работает для всех браузеров.
Я написал функцию 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'), ref = f.nextSibling;
form.appendChild(f);
form.reset();
ref.parentNode.insertBefore(f,ref);
}
}
}