Как отправить «файловый» ввод без кнопки отправки, используя JavaScript? - PullRequest
29 голосов
/ 15 декабря 2009

Есть способ автоматически отправить форму без нажатия кнопки «Отправить»?

У меня есть форма с одним «файловым» вводом. Я отправлю форму после того, как пользователь выберет один файл.

Ответы [ 5 ]

64 голосов
/ 15 декабря 2009

да, вы можете использовать функцию form.submit (). Добавьте слушатель onchange в файл ввода и свяжите его с функцией form.submit, например:

<form action="upload.php" method="post">
<input type="file" onchange="this.form.submit()" name="myFile"/>
</form>
8 голосов
/ 15 декабря 2009

Да, вы можете добавить следующее к onchange событию ввода файла:

<input type='file' .... onchange='this.form.submit();'>

это отправляет форму сразу после того, как пользователь выбрал файл. Однако пользователь не может исправить ошибочный выбор перед отправкой - обязательно проверьте, действительно ли это целесообразно.

3 голосов
/ 27 сентября 2013

Это решение работает для меня.

<form enctype="multipart/form-data" method="POST" action="/upload">
  <input id="myfilefield" type="file" name="file">
  <input type="submit">
</form>

document.getElementById('myfilefield').onchange = function() {
  this.form.submit();
};

Кстати, вам не нужно использовать вспышку. Gmail делает это XHR уровня 2.

1 голос
/ 15 декабря 2009

Я не верю, что вы можете сделать это. Браузеры очень и очень строги к тому, что вы можете сделать, чтобы заполнить поля загрузки, из-за возможности злоупотребления. Если пользователь случайно выберет приватный файл, он не захочет, чтобы он немедленно начал загрузку этого файла на случайный сервер.

0 голосов
/ 15 декабря 2009

Я не уверен, какие ограничения существуют в HTML-форме.

Однако вы можете сделать это с помощью Flash. Gmail делает это - когда я нажимаю «Прикрепить файл», мне выдается диалоговое окно просмотра файлов, и когда я нажимаю «ОК» в этом диалоговом окне, загрузка начинается немедленно, а также выдает индикатор выполнения.

Поиск в Google для «Flash Uploader» даст вам много вариантов, но у меня нет опыта ни с одним из них.

...