2012-06-26 46 views
2

我有一個相當複雜的網絡應用程序,我已經濃縮到下面的兩個HTML頁面,並且問題仍然存在。問題?在IE中的第二個(或更少)之後,thickbox模式的(iframe)輸入字段失去焦點(8 & 9)。它只發生在模態中時。如果您自行加載頁面,則焦點不會丟失。IE失去了重點在模態輸入字段

我試過jQuery 1.4.2和1.7.2,並且每個都會出現問題。我將它設置爲jsfiddle,但不認爲它支持能夠觸發第二頁。已經設定,讓你可以看到它working here

基本頁:

<!DOCTYPE HTML> 
<html> 
<head> 
<link href="http://jquery.com/demo/thickbox/thickbox-code/thickbox.css" media="screen" rel="stylesheet" type="text/css" > 
</head> 
<body> 
<a id="createAccountLink" class="thickbox" href="test2.html?KeepThis=true&TB_iframe=true&height=400&width=600">Login</a> 

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script type="text/javascript" src="http://jquery.com/demo/thickbox/thickbox-code/thickbox.js"></script> 
</body> 
</html> 

模態:

<html> 
<head> 
</head> 
<body> 
<input type="text" id="ContactFormName" name="firstName" class="text" value="" /> 

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$("#ContactFormName").focus(); 
</script> 
</body> 
</html> 

如果我從頭開始構建這個,我不會用ThickBox的。但改變它現在不是一個真正的選擇,因爲它在其他地方大量使用。

答案 重點必須延遲。即使1ms工作。

setTimeout (function() { 
$("#ContactFormName").focus(); 
}, 1); 
+0

沒有任何一種演示,沒有真正的方法來調試此行爲。 – j08691

+0

我已經添加了一個示例頁面的鏈接。你不能編輯它,但你可以看到它的工作。如果我可以讓jsfiddle來啓動一個iframe,我會在那裏設置它。 – user1337

+1

爲什麼你的腳本加載在身體而不是頭部?另外,雖然我沒有使用過thickbox,但爲什麼你的模式包含整頁的HTML?你不需要HTML格式嗎?最後,爲什麼模式需要再次加載jQuery? – j08691

回答

5

焦點必須延遲。即使1ms工作。

setTimeout (function() { 
$("#ContactFormName").focus(); 
}, 1); 
1

對於ASP.NET我創建了一個擴展方法:

public static void FocusDelayed(this WebControl control, Page page) 
{ 
    ScriptManager.RegisterStartupScript(page, page.GetType(), "focusDelayed", "setTimeout (function() { document.getElementById(\"" + control.ClientID + "\").focus(); }, 500);", true); 
}  

所以,在彈出的onload的Page_Load我稱之爲

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      controleName.FocusDelayed(Page);     
     } 
    }  

希望它可以幫助別人。

乾杯