Je sais que c'est vieux, et toutes ces solutions sont des hacks autour des précautions de sécurité du navigateur avec une valeur réelle.
Cela dit, à partir d'aujourd'hui, fileInput.click () fonctionne dans Chrome actuel (36.0.1985.125 m) et Firefox ESR actuel (24.7.0), mais pas dans IE actuel (11.0.9600.17207). La superposition d'un champ de fichier avec l'opacité 0 au-dessus d'un bouton fonctionne, mais je voulais un élément de lien comme déclencheur visible, et le soulignement du survol ne fonctionne pas tout à fait dans n'importe quel navigateur. Il clignote puis disparaît, probablement le navigateur réfléchissant si le style de vol stationnaire s'applique réellement ou non.
Mais j'ai trouvé une solution qui fonctionne dans tous ces navigateurs. Je ne prétendrai pas avoir testé chaque version de chaque navigateur, ou que je sais qu'il continuera de fonctionner pour toujours, mais il semble répondre à mes besoins maintenant.
C'est simple: positionnez le champ de saisie de fichier hors écran (position: absolu; haut: -5000 pixels), placez un élément d'étiquette autour de lui et déclenchez le clic sur l'étiquette, au lieu du champ de fichier lui-même.
Notez que le lien doit être scripté pour appeler la méthode click de l'étiquette, il ne le fait pas automatiquement, comme lorsque vous cliquez sur du texte à l'intérieur d'un élément d'étiquette. Apparemment, l'élément de lien capture le clic, et il ne parvient pas à l'étiquette.
Notez également que cela ne permet pas d'afficher le fichier actuellement sélectionné, car le champ est hors écran. Je voulais soumettre immédiatement lorsqu'un fichier a été sélectionné, donc ce n'est pas un problème pour moi, mais vous aurez besoin d'une approche quelque peu différente si votre situation est différente.