2009-12-14 3 views

risposta

55

sì, è possibile utilizzare la funzione form.submit(). Aggiungere un ascoltatore onchange sull'ingresso del file e collegarlo alla funzione form.submit, in questo modo:

<form action="upload.php" method="post"> 
<input type="file" onchange="this.form.submit()" name="myFile"/> 
</form> 
1

Non credo che tu possa farlo. I browser sono molto, molto severi su ciò che puoi fare per archiviare i campi di caricamento, a causa del potenziale di abuso. Se l'utente seleziona accidentalmente un file privato, non vorrebbe che iniziasse immediatamente a caricare quel file su un server casuale.

+0

non è vero, ho appena testato il codice nella mia risposta, e funziona (almeno in Firefox). – Marius

+1

Dispari, codice simile non funziona qui. Verificando ulteriormente ... – ceejayoz

+4

Molto vero ... questa soluzione NON funziona in tutti i browser –

6

Sì, è possibile aggiungere quanto segue alla onchange caso di file di input:

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

invia il modulo subito dopo che l'utente ha selezionato un file. Tuttavia, l'utente non può correggere una selezione errata prima di inviarla, accertarsi di verificare se è veramente saggia.

-1

Non sono sicuro quali sono le restrizioni con cui eseguire questa operazione in un modulo HTML.

È possibile, tuttavia, farlo con Flash. Gmail lo fa - quando faccio clic su "Allega un file", viene visualizzata una finestra di dialogo per la ricerca di file, e quando faccio clic su OK, il caricamento inizia immediatamente e mi dà anche una barra di avanzamento.

Googling per "Flash uploader" ti darà molte opzioni, ma non ho esperienza con nessuno di loro.

2

Questa soluzione funziona per me.

<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(); 
}; 

Tra l'altro, non è necessario utilizzare il flash. Gmail lo fa da XHR Livello 2.