2

次の 2 つの HTML ページに要約したかなり複雑な Web アプリケーションを持っていますが、問題はまだ存在します。問題?IE (8 & 9) では、thickbox モーダル (iframe) の入力フィールドが 1 秒 (またはそれ以下) 後にフォーカスを失います。モーダルにある場合にのみ発生します。ページを単独でロードしても、フォーカスは失われません。

jQuery 1.4.2 と 1.7.2 の両方を試しましたが、それぞれで問題が発生します。これをjsfiddleとして設定しますが、2番目のページをトリガーできるとは思わない. ここで動作を確認できるように設定しました

ベースページ:

<!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 は使用しません。しかし、それを変更することは、他の場所で頻繁に使用されているため、現時点では実際にはオプションではありません.

Answer フォーカスを遅らせる必要があります。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);
}    

だから、ポップアップのオンロード Page_Load で私はそれを呼び出します

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

それが誰かに役立つことを願っています。

乾杯

于 2015-01-08T16:51:05.443 に答える