Ich weiß, dass dies alt ist, und all diese Lösungen sind Hacks um Sicherheitsvorkehrungen für Browser mit echtem Wert.
Ab heute funktioniert fileInput.click () im aktuellen Chrome (36.0.1985.125 m) und im aktuellen Firefox ESR (24.7.0), jedoch nicht im aktuellen IE (11.0.9600.17207). Das Überlagern eines Dateifelds mit der Deckkraft 0 über einer Schaltfläche funktioniert, aber ich wollte ein Linkelement als sichtbaren Auslöser, und das Unterstreichen des Schwebefluges funktioniert in keinem Browser. Es blinkt und verschwindet dann. Wahrscheinlich überlegt der Browser, ob das Hover-Styling tatsächlich zutrifft oder nicht.
Aber ich habe eine Lösung gefunden, die in all diesen Browsern funktioniert. Ich werde nicht behaupten, jede Version jedes Browsers getestet zu haben oder dass ich weiß, dass es für immer funktionieren wird, aber es scheint jetzt meine Anforderungen zu erfüllen.
Es ist ganz einfach: Positionieren Sie das Dateieingabefeld außerhalb des Bildschirms (Position: absolut; oben: -5000px), setzen Sie ein Beschriftungselement darum und lösen Sie den Klick auf die Beschriftung anstelle des Dateifelds selbst aus.
Beachten Sie, dass der Link per Skript ausgeführt werden muss, um die Klickmethode des Etiketts aufzurufen. Dies geschieht nicht automatisch, wie wenn Sie auf Text in einem Etikettenelement klicken. Anscheinend erfasst das Link-Element den Klick und schafft es nicht bis zur Beschriftung.
Beachten Sie auch, dass dies keine Möglichkeit bietet, die aktuell ausgewählte Datei anzuzeigen, da das Feld außerhalb des Bildschirms liegt. Ich wollte sofort einreichen, wenn eine Datei ausgewählt wurde, daher ist das für mich kein Problem, aber Sie benötigen einen etwas anderen Ansatz, wenn Ihre Situation anders ist.