質問

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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top