7

ATextBoxAutoPostback、値を変更すると、いくつかの(表示専用)フィールドが再計算されて表示されるように設定されています。
それはうまくいきます。

ただし、フィールドがタブアウトされると、フォーカスは一時的に次のフィールドに移動し、ページが再描画されると消えて、どこにもフォーカスがなくなります。

変更したばかりのテキストボックスではなく、新しいフィールドに焦点を合わせたいと思います。どのフィールドにフォーカスがあったかを調べて、ページが再描画されたときに再びフォーカスを持たせる方法はありますか?

4

3 に答える 3

4

これは「設計による」ものです。ASP.NET 2.0 以降を使用している場合は、ポストバックが発生したら (できれば TextBox の TextChanged イベントで)、TextBox の Focus メソッドを呼び出すことができます。

フォーカスを追跡する組み込みの方法があるかどうかはわかりませんが、CodeProject でこの記事を見つけました。

于 2008-10-06T10:31:15.650 に答える
1

これが起こっていることです:

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>
于 2011-10-24T11:49:07.173 に答える
1

AJAX UpdatePanelを使用して表示専用フィールドを更新することも検討できます。このようにして、新しいフィールドから焦点を失うことはありません。

また、 WebControl.Controls.TabIndex分析に基づく純粋なサーバー側のソリューションを提案しまし た。必要に応じて使用できます。

于 2008-10-07T06:26:53.427 に答える