Я знаю, что это старое, и все эти решения являются мошенничеством вокруг мер безопасности браузера с реальной ценностью.
Тем не менее, на сегодняшний день fileInput.click () работает в текущем Chrome (36.0.1985.125 м) и текущем Firefox ESR (24.7.0), но не в текущем IE (11.0.9600.17207). Наложение поля файла с непрозрачностью 0 поверх кнопки работает, но я хотел, чтобы элемент ссылки был видимым триггером, а подчеркивание при наведении курсора не вполне работает ни в одном браузере. Он мигает, а затем исчезает, вероятно, браузер выясняет, действительно ли применяется стиль наведения мыши или нет.
Но я нашел решение, которое работает во всех этих браузерах. Я не буду утверждать, что проверил каждую версию каждого браузера или знаю, что он будет работать вечно, но теперь он отвечает моим потребностям.
Все просто: поместите поле ввода файла за пределы экрана (позиция: абсолютная; верх: -5000px), поместите элемент метки вокруг него и запустите щелчок на метке вместо самого поля файла.
Обратите внимание, что для вызова метода click метки ссылка должна быть написана в сценарии, она не делает этого автоматически, например, когда вы нажимаете на текст внутри элемента метки. Видимо, элемент ссылки фиксирует щелчок, и он не попадает на ярлык.
Также обратите внимание, что это не предоставляет способ показать текущий выбранный файл, так как поле находится вне экрана. Я хотел отправить сразу же, когда файл был выбран, так что это не проблема для меня, но вам понадобится несколько иной подход, если ваша ситуация отличается.