Почему я не могу переходить между элементами формы в iframe?

У меня есть страница на сайте, которая содержит iframe с формой. Я не могу это изменить, но у меня есть полный контроль над всем JS, который работает на родительской странице и на странице iframe.

Моя проблема заключается в том, что когда у меня есть поле формы, сфокусированное в документе iframe, переход к следующему полю отправляет курсор прямо в адресную строку браузера, а не в следующее поле в форме. Установка tabindex для каждого из полей не помогает.

Браузер рассматривает весь iframe как один из элементов на странице (как и должно быть), но мне интересно, есть ли способ захватить события вкладки и заставить фокус оставаться внутри iframe и с его дочерними элементами .

Кто-нибудь из вас сталкивался с этой проблемой раньше и как ее обойти?

Не то, чтобы это вам помогло, но макет примерно такой:

+-------------------------------------------+
| Parent page                               |
|         +-------------------------------+ |
|  N      | iframe                        | |
|  a      |                               | |
|  v      | Has about 50 fields that I'd  | |
|  i      | like to be able to tab between| |
|  g      |                               | |
|  a      | But I can't! Help!            | |
|  t      |                               | |
|  i      +-------------------------------+ |
|  o                                        |
|  n                                        |
+-------------------------------------------+

Одна из идей заключалась в том, чтобы попытаться зафиксировать события нажатия клавиш в iframe, проверить наличие табуляции или shift+tab, а затем перефокусировать iframe, но тогда возникает проблема с знанием того, в каком поле я был, прежде чем потерять фокус. Есть ли способ динамически сфокусировать следующее поле с помощью JS и атрибута tabindex в полях формы? Возможно, именно туда я рискну в следующий раз...

Обновление: возможно, я упустил что-то еще более простое. Например, окно входа на http://www.studentloan.com представляет собой iframe, и я могу переходить между эти поля просто отлично. Возможно, что-то еще в моем JS вызывает проблему.

Обновление 2. Я попытался загрузить только документ iframe в браузере как отдельную страницу, но по-прежнему не могу открыть вкладку. Я думаю, что это то, что я делаю в JS где-то еще, что приводит к тому, что документ теряет фокус. Я опубликую свое решение, когда найду его.

Обновление 3:

Проблема вызвана ModalPopupExtender Ajax Control Tookit. Я использую один как сообщение о загрузке после вызова веб-сервиса. Он скрывается при запуске метода обратного вызова.

Я могу переключаться между полями, пока модальное всплывающее окно не будет показано и скрыто в первый раз. После этого форма никогда не сможет удерживать свой фокус. Я выясняю, почему, и опубликую ответ, если смогу узнать, почему.

Спасибо!


person Cᴏʀʏ    schedule 29.05.2009    source источник


Ответы (2)


У меня была почти такая же проблема, как у вас. После долгих поисков решения я нашел эту сеть, где я мог узнать, что вызывает у меня эту проблему: файл modalpopupextender. Как только я узнал, в чем была настоящая проблема, было довольно легко найти решение. Вот он: http://forums.asp.net/t/1191142.aspx

Я надеюсь, что это поможет вам понять эту проблему так же, как и мне.

person Community    schedule 23.07.2009
comment
Вы совершенно правы. У меня есть куча MPE, которые отлично работают, был только один проблемный (у него не было никаких полей формы - интересно, было ли это частью проблемы). Спасибо, что вернулись, чтобы опубликовать это! - person Cᴏʀʏ; 23.07.2009

Я предполагаю, что использование ajax исключено?

Если это не так, то у вас нет проблем с вкладками iframe, поскольку ваша форма является частью текущей страницы.

person Ryan Florence    schedule 29.05.2009
comment
Все приложение работает на основе AJAX и веб-сервисов .NET 3.5. Единственное, что я хочу, но не могу изменить, это использование iframe. Забавно то, что я помню, как раньше таббинг работал... - person Cᴏʀʏ; 29.05.2009