Я бы предпочел избежать уловок прозрачности.
Это сработало для меня (использует jQuery):
$("#upload-box").change(function(){
$("#upload-click-handler").val($(this).val());
});
$("#upload-click-handler").click(function(){
$("#upload-box").click();
});
И HTML:
<input id="upload-box" style="visibility:hidden;height:0;" name="Photo" type="file" />
<input id="upload-click-handler" type="text" readonly />
Создает ввод текста, скрытый ввод загрузки и исправляет (= маршруты) щелчок на вводе текста для ввода скрытого файла.
Когда файл выбран, он запишет имя файла в текстовом вводе в соответствии с тем, что большинство пользователей ожидают от интерфейса.
Должно работать на FF, Chrome, IE9 и +. Я не проверял это на IE8.
Вот jsfiddle . Спасибо, что проголосовали за мой ответ, если вам это нравится.