将焦点设置为IE中的iFrame

我的应用程序中有一个树状菜单,点击菜单项后,它会在iFrame中加载一个url。 我喜欢将焦点设置在iFrame中加载的页面元素中。

我正在使用这个代码, 它在IE以外的所有浏览器中都能很好地工作

var myIFrame = $("#iframeName"); myIFrame.focus(); myIFrame.contents().find('#inputName').focus(); 

我尝试了所有不同的选项,比如使用setTimeout,但没有机会。

页面加载后,当我按Tab键时,它转到第二个输入,这意味着它已经在第一个输入,但它没有显示光标!

我正在使用ExtJS和ManagedIFrame插件。

任何帮助表示赞赏。

您需要调用iframe window对象的focus()方法,而不是iframe元素。 我不是jQuery或ExtJS的专家,所以下面我的例子都没用。

 function focusIframe(iframeEl) { if (iframeEl.contentWindow) { iframeEl.contentWindow.focus(); } else if (iframeEl.contentDocument && iframeEl.contentDocument.documentElement) { // For old versions of Safari iframeEl.contentDocument.documentElement.focus(); } } 

iFrame是可见的onload还是稍后显示? 元素以不同的顺序创建,这是setTimeout方法的基础。 您是否在设置超时时尝试了高值等待时间?

尝试至少半秒钟来测试… IE往往以不同的顺序执行操作,因此可能需要高超时才能在渲染/绘制完成之前不要触发:

 $(function(){ setTimeout(function() { var myIFrame = $("#iframeName"); myIFrame.focus(); myIFrame.contents().find('#inputName').focus(); }, 500); }); 

没有工作示例很难排除故障,但您也可以尝试隐藏并显示输入,以强制IE重绘元素。

就像是:

 var myIFrame = $("#iframeName"); myIFrame.focus(); myIFrame.contents().find('#inputName').hide(); var x = 1; myIFrame.contents().find('#inputName').show().focus(); 

这可能会使IE摇动显示光标。

我可以让IE将输入字段集中在iframe中:

 iframe.focus(); var input = iframe... input.focus(); iframe.contentWindow.document.body.focus(); input.focus();