2011-01-19 18 views
20

Ho il seguente codice HTMLPOST subito dopo selezionare un file

<form action="/script/upload_key.py" method="POST" enctype="multipart/form-data"> 
    Key filename: <input name="file_1" type="file"> 
    <input name="submit" type="submit"> 
</form> 

che mi dà la roba seguente.

alt text

Mi chiedevo

  1. Come posso usare JavaScript, per eliminare la necessità di Submit pulsante. Ciò significa che, una volta I Choose File, il file selezionato verrà caricato immediatamente?
  2. Come posso assicurarmi che il campo per visualizzare il nome del file selezionato sia abbastanza lungo, in modo che ... non venga visualizzato?
+1

Perché si desidera ignorare il pulsante Invia? E, se gestisci il numero 1, il numero 2 non avrà importanza perché l'utente verrà reindirizzato subito dopo aver scelto il file. –

+1

Quindi, non appena avrò scelto il file sbagliato verrà caricato senza che io debba confermare che voglio caricare il file sbagliato premendo il pulsante di invio. –

risposta

35

di sottoporlo immediatamente, basta fare questo:

<input name="file_1" type="file" onchange="this.form.submit();"> 

Se si utilizza JQuery:

$("input[name='file_1']").change(function() { this.form.submit(); }); 

Chi vostre altre domande:

1) ci sono molti metodo s là fuori ... per esempio:

http://valums.com/ajax-upload/

http://www.webtoolkit.info/ajax-file-upload.html

(e molti altri. Solo google per: "caricamento file Ajax" o "upload file iframe")

2) Non preoccuparti della larghezza del campo. Dato che non sai per quanto tempo può essere il percorso, non sarebbe mai abbastanza lungo (credo). Anche i browser potrebbero mostrarlo in modo molto diverso. Ad esempio Safari o Chrome lo mostrano molto diverso da Firefox o IE. Basta usare la lunghezza predefinita o quella che sembra migliore con il tuo design.

+2

Non hai bisogno del prefisso "javascript:" all'interno degli attributi onevent –

+0

Errore su ie8 con accesso negato sulla chiamata da inviare. –

2

Per la prima:

<input name="file_1" type="file" onchange="this.form.submit()"> 

non sono sicuro di fare il campo abbastanza ampio però. A volte il CSS viene azzoppato sui campi di caricamento dei file per prevenire gli exploit.

+0

Generalmente per lo stile degli input di file devi impiegare il trucco di mettere un elemento di input di file fantasma trasparente su alcuni elementi fittizi che sembrano come li vuoi. – Pointy

+0

L'ho fatto una volta tanto tempo fa e da allora ho deciso che di solito è meglio mantenere gli input di form come le persone si aspetterebbero dal modo in cui sono resi nativamente. Ecco la guida se vuoi davvero farlo in questo modo: http://www.quirksmode.org/dom/inputfile.html – scragz

0

occhio e croce a ciò che si vuole - quando il campo di testo cambia attiverà il modulo di presentazione

$('.target').change(function() { 
    document.forms["myform"].submit(); 
}); 

Edit: Scusa, ho usato jQuery ...

Se si invia il modulo onchange, non noterai che il campo viene popolato e quindi non dovrebbe essere necessario modificare la lunghezza del testo. Se avete voglia di, vorrei avere il numero di caratteri della stringa nel campo e poi applicare un attributo size all'ingresso

mylength = document.getElementById('myfield').value 
document.getElementById('myfield').size = mylength; 
Problemi correlati