2

我有一个相当复杂的网络应用程序,我将其压缩为以下两个 HTML 页面,但问题仍然存在。问题?在 IE (8 & 9) 中,厚框模式的 (iframe) 输入字段在一秒(或更短)后失去焦点。它仅在处于模态时发生。如果您自己加载页面,焦点不会丢失。

我已经尝试了 jQuery 1.4.2 和 1.7.2,并且每个都出现了问题。我将其设置为 jsfiddle 但不认为它支持能够触发第二页。已经设置好了,所以你可以看到它在这里工作

基本页面:

<!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);
4

2 回答 2

5

焦点必须延迟。即使是 1ms 也可以。

setTimeout (function () {
$("#ContactFormName").focus();
}, 1);
于 2012-06-26T21:04:58.003 回答
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);                
        }
    }    

希望它可以帮助某人。

干杯

于 2015-01-08T16:51:05.443 回答