Как вы устанавливаете входной файл ничего с 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);
        }
    }
}