我在一个站点中有一个页面,其中包含一个带有表单的 iframe。我无法更改这一点,但我可以完全控制在父页面和 iframe 页面中运行的所有 JS。
我的问题是,当我有一个集中在 iframe 文档中的表单字段时,跳到下一个字段会将光标直接发送到浏览器的地址栏,而不是表单中的下一个字段。在每个字段上设置 tabindexes 没有帮助。
浏览器将整个 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 中的 keydown 事件,检查 tab 或 shift+tab,然后重新聚焦 iframe,但是在失去焦点之前知道我在哪个字段上存在问题。有没有办法使用 JS 和表单字段上的 tabindex 属性动态聚焦下一个字段?也许这就是我下一步冒险的地方......
更新: 也许我缺少一些更简单的东西。例如, http://www.studentloan.com上的登录框是一个 iframe,我可以很好地在这些字段之间切换。也许我的JS中的其他东西导致了这个问题。
更新 2:我尝试将浏览器中的 iframe 文档作为独立页面加载,但我仍然无法选项卡。我认为这是我在其他地方的 JS 中所做的事情导致文档失去焦点。当我找到它时,我会发布我的解决方案。
更新 3:
该问题是由 Ajax Control Tookit 的 ModalPopupExtender 引起的。调用网络服务后,我将其用作加载消息。当回调方法被触发时它会被隐藏。
我可以在字段之间切换,直到第一次显示和隐藏 Modal 弹出窗口。之后,表单将永远无法保持焦点。我正在调查原因,如果我能找出原因,我会发布答案。
谢谢!