2010-01-11 224 views
5

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

我使用这个代码,并它完美的作品在所有的浏览器除了IE以外

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

我已经试过喜欢使用setTimeout的所有不同的选项,但没有机会。

页面加载后,当我点击tab键时,它会进入第二个输入,这意味着它已经在第一个输入上,但它不显示光标!

我正在使用ExtJS和ManagedIFrame插件。

任何帮助表示赞赏。

+0

是iframe网址比从主窗口不同的域?有关于安全领域的担忧,IE的行为有点不同。 此外,这个代码包装在文档就绪,或只是在页面上运行? – 2010-01-11 23:40:17

+0

它从同一个域加载页面。是的,代码被包装在文档中。它实际上适用于FireFox,Safari和Chrome,而不是IE。 – 2010-01-11 23:44:22

回答

3

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

试着这么做至少半秒,以测试... IE浏览器往往会做的事情以不同的顺序,那么可能需要较高的超时得到它不火,直到呈现/漆:

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

嗯,我甚至在1000之前就试过了。还有一件事可能会有所帮助,它会显示光标一会儿,光标立即消失!正如我在问题中所说的,在我点击标签后,它会进入下一个输入框。它只是不显示光标。 此外,iframe在onload中可见,但稍后会设置src,每次用户单击菜单项。 – 2010-01-12 00:28:48

+0

您是否每次重点关注iframe src? – 2010-01-12 00:32:24

+0

是的,我是。它每次都在文档加载事件之后设置焦点。 – 2010-01-12 19:22:20

4

您需要调用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(); 
    } 
} 
+3

我试过了,但没有奏效。 – 2010-01-13 19:33:08

1

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

喜欢的东西:

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

这可能颠簸到IE显示光标。

0

我能得到IE集中在一个iframe的输入字段:

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