Когда дело доходит до навигации по форме HTML нажатием клавиши TAB, Internet Explorer 7 обрабатывает элемент INPUT
с TYPE=FILE
как два элемента управления (, см. MSDN для подробностей ). При первом нажатии клавиши TAB он фокусируется на текстовом поле, а второй раз при нажатии кнопки «Обзор». Это невидимо для JavaScript.
Проблема в том, что я хочу использовать Ajax Upload или что-то подобное, чтобы позволить пользователю щелкнуть что-то похожее на кнопку и увидеть, как появляется средство выбора файлов. Это работает, помещая невидимый элемент ввода файла под мышью. Мне удалось изменить сценарий, чтобы позволить вам использовать TAB для скрытого элемента ввода файла и для этого вызвать изменение CSS, так что фальшивая кнопка выглядит так, как будто она имеет фокус, в результате чего в браузерах, отличных от IE7, она выглядит пользователю, как будто вы можете нажать на кнопку и активировать ее, как вы ожидаете.
Это не может работать в IE7, потому что первый TAB переносит его в невидимое текстовое поле; нажатие клавиши ПРОБЕЛ добавляет пробел к невидимому имени файла вместо активации средства выбора файлов. Я попытался добавить обработчик события для keypress
, который вызывает событие click
, но когда я делаю это, событие change
, от которого я зависел, похоже, не запускается.
Я начинаю думать, что единственное доступное решение для IE7 (и, я полагаю, IE8) будет состоять в том, чтобы заменить весь диалог формой, состоящей из двух частей - первая часть с (видимым) элементом ввода файла и Upload Кнопка, вторая часть со всеми другими элементами формы. Это прискорбно, потому что (а) IE7 получает менее удобное взаимодействие с пользователем, и (б) мне нужно добавить все виды дополнительного серверного кода, чтобы форма была отправлена в двух частях.
Поэтому мне было бы интересно узнать, есть ли у кого-нибудь способ заставить элемент ввода файлов IE7 вести себя как один элемент управления или, альтернативно, разрешить JavaScript доступ к обоим элементам управления элемента (для чего DOM не был разработан !).