TextBox を使用した AutoPostback がフォーカスを失う
-
05-07-2019 - |
質問
あ TextBox
に設定されています AutoPostback
値を変更すると、多数の (表示専用) フィールドが再計算されて表示されるためです。
それはうまくいきます。
ただし、フィールドをタブで移動すると、フォーカスは次のフィールドに一時的に移動し、ページが再描画されると消えてしまうため、どこにもフォーカスがありません。
変更したばかりのテキストボックスではなく、新しいフィールドにフォーカスしたいのです。どのフィールドにフォーカスがあったかを調べて、ページが再描画されたときに強制的にフォーカスを再度持たせる方法はありますか?
解決
これは「設計による」です。 ASP.NET 2.0+を使用している場合、ポストバックが発生したら(できればTextBoxのTextChangedイベントで)TextBoxのFocusメソッドを呼び出してみてください。
フォーカスを追跡する組み込みの方法があるかどうかはわかりませんが、 CodeProjectのこの記事は、トリックを行う必要があります。
他のヒント
AJAX UpdatePanel 。これにより、新しいフィールドからフォーカスを失うことはありません。
また、 WebControl.Controlsに基づく純粋なサーバー側ソリューションを提案しました。 .TabIndex 分析では、必要に応じて使用できます。
これが起こっていることです:
1) フィールド上の TAB - クライアント イベント
2) 次の分野 - クライアントイベントに焦点を当てる
3) ポストバック - サーバー イベント
4) ページの再描画 - クライアント イベントの新しいページが以前のクライアント イベントをオーバーライドします
あなたの問題の解決策は次のとおりです。
a) フォーカスを取得した要素を取得します ポストバック前
<script>
var idSelected;
$("input").focusin(function () {
idSelected = this.id;
});
</script>
b) ClientID を保存する (実際には var idSelected
) どこかで (すなわち、非表示のテキストボックス、ViewState = true の場合) ポストバック前
** b) ClientID を取得 ** (非表示の TextBox から抽出して配置します) var idSelected
) ポストバック後
d) ClientID を持つ要素を取得し、フォーカスを設定します ポストバック後
<script>
$(document).ready(function () {
if (idSelected != null) {
$("#" + idSelected).focus();
idSelected = null;
});
});
</script>
注記:このサンプル スクリプトは使用します JQuery.
忘れずに入れてください Jquery.js
ソリューション内とページ内の参照
<form id="form1" runat="server" enctype="multipart/form-data" method="post">
<asp:ScriptManager runat="server" >
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery.js" ScriptMode="Auto" />
....
注2:この解決策は機能します AJAXなし.
見る この答え:Javascript を Ajax 上で動作させるには、次のようなコードを使用する必要があります。
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
function EndRequestHandler(sender, args)
{
MyScript();
}
</script>