So che questo è vecchio e tutte queste soluzioni sono trucchi per le precauzioni di sicurezza del browser con un valore reale.
Detto questo, ad oggi, fileInput.click () funziona nell'attuale Chrome (36.0.1985.125 m) e nell'ESR Firefox attuale (24.7.0), ma non nell'IE I corrente (11.0.9600.17207). La sovrapposizione di un campo file con l'opacità 0 sopra un pulsante funziona, ma volevo un elemento di collegamento come trigger visibile e il passaggio del mouse sopra non funziona in nessun browser. Si accende e poi scompare, probabilmente il browser pensa se lo stile hover si applica o meno.
Ma ho trovato una soluzione che funziona in tutti quei browser. Non pretenderò di aver testato ogni versione di ogni browser o di sapere che continuerà a funzionare per sempre, ma sembra soddisfare le mie esigenze ora.
È semplice: posiziona il campo di input del file fuori dallo schermo (posizione: assoluto; in alto: -5000px), metti un elemento etichetta attorno ad esso e attiva il clic sull'etichetta, invece del campo file stesso.
Nota che per chiamare il metodo click dell'etichetta è necessario che il link sia scritto, non lo fa automaticamente, come quando fai clic sul testo all'interno di un elemento label. Apparentemente l'elemento link cattura il clic e non riesce a raggiungere l'etichetta.
Si noti inoltre che ciò non fornisce un modo per mostrare il file attualmente selezionato, poiché il campo è fuori schermo. Volevo inviare immediatamente quando è stato selezionato un file, quindi non è un problema per me, ma avrai bisogno di un approccio un po 'diverso se la tua situazione è diversa.