2010-01-11 152 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();