teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記&訂正

2018/11/06 03:42

投稿

退会済みユーザー
answer CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  下の 2018/11/06 11:23 の -shu- さんへの私のコメントで「具体的には後で回答欄に追記しておきます」と書きましたが、それを追記しておきます。
22
22
 
23
- 以下のコードは、MaintainScrollPositionOnPostBack="true" の条件で、C# 側のコードで TextBox.Focus() とした場合と、RegisterStartupScript メソッドでーカスを当てるためのスクリプトを追加した場合、レンダリングされる html ソースの違いです。
23
+ 以下のコードは、MaintainScrollPositionOnPostBack="true" の条件で、C# 側のコードで TextBox.Focus() とした場合と、RegisterStartupScript メソッドでフォーカスを当てるためのスクリプトを追加した場合、レンダリングされる html ソースの違いです。
24
24
 
25
25
  **TextBox.Focus()**
26
26
 

2

追記

2018/11/06 03:42

投稿

退会済みユーザー
answer CHANGED
@@ -14,4 +14,59 @@
14
14
 
15
15
  (2) MaintainScrollPositionOnPostBack が動いてない(true にしても動かない場合がある)
16
16
 
17
- それ例外の原因があるかもしれないが、あるとすると質問者さん独自の実装の問題。質問のコメントに書いたように「今のコードを問題が再現できる必要最低限になるまでどんどん削っていく」というようにして自分で調べてもらう他なさそう。
17
+ それ例外の原因があるかもしれないが、あるとすると質問者さん独自の実装の問題。質問のコメントに書いたように「今のコードを問題が再現できる必要最低限になるまでどんどん削っていく」というようにして自分で調べてもらう他なさそう。
18
+
19
+ **【2018/11/06 11:37 追記】**
20
+
21
+ 下の 2018/11/06 11:23 の -shu- さんへの私のコメントで「具体的には後で回答欄に追記しておきます」と書きましたが、それを追記しておきます。
22
+
23
+ 以下のコードは、MaintainScrollPositionOnPostBack="true" の条件で、C# 側のコードで TextBox.Focus() とした場合と、RegisterStartupScript メソッドでローカスを当てるためのスクリプトを追加した場合、レンダリングされる html ソースの違いです。
24
+
25
+ **TextBox.Focus()**
26
+
27
+ ```
28
+ ・・・前略・・・
29
+
30
+ <script type="text/javascript">
31
+ //<![CDATA[
32
+
33
+ theForm.oldSubmit = theForm.submit;
34
+ theForm.submit = WebForm_SaveScrollPositionSubmit;
35
+
36
+ theForm.oldOnSubmit = theForm.onsubmit;
37
+ theForm.onsubmit = WebForm_SaveScrollPositionOnSubmit;
38
+
39
+ theForm.oldOnLoad = window.onload;
40
+ window.onload = WebForm_RestoreScrollPosition;
41
+ WebForm_AutoFocus('MainContent_TextBox2');//]]>
42
+ </script>
43
+ </form>
44
+ </body>
45
+ </html>
46
+ ```
47
+
48
+ **RegisterStartupScript メソッド使用**
49
+
50
+ ```
51
+ ・・・前略・・・
52
+
53
+ <script type="text/javascript">
54
+ //<![CDATA[
55
+ document.getElementById('MainContent_TextBox2').focus();
56
+ theForm.oldSubmit = theForm.submit;
57
+ theForm.submit = WebForm_SaveScrollPositionSubmit;
58
+
59
+ theForm.oldOnSubmit = theForm.onsubmit;
60
+ theForm.onsubmit = WebForm_SaveScrollPositionOnSubmit;
61
+
62
+ theForm.oldOnLoad = window.onload;
63
+ window.onload = WebForm_RestoreScrollPosition;
64
+ //]]>
65
+ </script>
66
+ </form>
67
+ </body>
68
+ </html>
69
+ ```
70
+ いずれもフォーカスが当てってから、window.onload = WebForm_RestoreScrollPosition; でスクロールされます。
71
+
72
+ 動きとしてはどちらも同じです。「自力で上記回答のようなスクリプトを書くのはあまり意味がない」というか、逆に手間が増えるし、質問者さんに指摘されたように ClientID を使わないとダメということも考えなければなりません。

1

訂正

2018/11/06 02:37

投稿

退会済みユーザー
answer CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  まず、MaintainScrollPositionOnPostBack の機能と C# のコードでフォーカスを当てることには不整合・競合は生じません。
8
8
 
9
- クライアント側のスクリプトで目的の要素にフォーカスが当たってからスクロールするという動きになるので期待通りの結果になります。
9
+ クライアント側のスクリプトで目的の要素にフォーカスが当たってからスクロールするという動きになるので期待通りの結果になります。
10
10
 
11
11
  質問の画像のような結果になるとすると考えられる理由は:
12
12