Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在IE中将焦点设置为iFrame_Javascript_Jquery_Iframe_Extjs_Focus - Fatal编程技术网

Javascript 在IE中将焦点设置为iFrame

Javascript 在IE中将焦点设置为iFrame,javascript,jquery,iframe,extjs,focus,Javascript,Jquery,Iframe,Extjs,Focus,在我的应用程序中有一个树菜单,单击菜单项,它会在iFrame中加载一个url。我喜欢在iFrame中加载的页面元素中设置焦点 我正在使用这段代码,它在除IE之外的所有浏览器中都能完美运行: var myIFrame = $("#iframeName"); myIFrame.focus(); myIFrame.contents().find('#inputName').focus(); 我尝试过所有不同的选项,比如使用setTimeout,但没有机会 页面加载后,当我点击tab键时,它进入第二个

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

我正在使用这段代码,它在除IE之外的所有浏览器中都能完美运行:

var myIFrame = $("#iframeName");
myIFrame.focus();
myIFrame.contents().find('#inputName').focus();
我尝试过所有不同的选项,比如使用setTimeout,但没有机会

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

我正在使用ExtJS和ManagedIFrame插件


非常感谢您的帮助。

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

尝试至少半秒钟的时间来测试…IE倾向于以不同的顺序进行操作,因此可能需要很长的超时时间才能使其在渲染/绘制完成之前不点火:

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

您需要调用iframe的
窗口
对象的
focus()
方法,而不是iframe元素。我不是jQuery或ExtJS方面的专家,所以下面的示例中既没有使用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();
    }
}

如果没有工作示例,很难进行故障排除,但您也可以尝试隐藏和显示输入,以强制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();

iFrame URL是否来自与主窗口不同的域?这与安全域有关,IE的行为有点不同。另外,这段代码是包装为在文档准备好的情况下运行,还是仅在页面中运行?它从同一域加载页面。是的,代码被包装在文档准备中。实际上,它可以在FireFox、Safari和Chrome上使用,而不是IE上。我以前甚至用1000个浏览器试用过。还有一件事可能会有所帮助,它会显示光标片刻,然后光标立即消失!正如我在问题中所说的,在我点击标签后,它进入下一个输入框。它只是不显示光标。此外,iframe在加载时可见,但在以后每次用户单击菜单项时都会设置src。是否每次iframe src更改时都会聚焦?是的,我会。它在每次documentloaded事件之后设置焦点。