これが起こっていることです:
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>