- - PR -
RadioButtonListにフォーカス設定は無理!?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-15 16:37
いつもお世話になっております。
あまりに不思議なので、標記の件につき質問させて頂きます。 <前提> 言語:ASP.NET 2.0 (VB.NET) 環境:VisualStudio2005 <ご質問> RadioButtonListにデフォルトフォーカスが設定したい。 <現状> 以下の4パターンの実装方法につき、いずれも実現に至っていない。 @formのプロパティにて、defaultfocusをRadioButtonListコントロールに設定しても、フォーカスが設定されない。 APage_Loadメソッドにて、RadioButtonListコントロール.focus()としてもフォーカスが設定されない。(※なお、同一画面上のテキストボックスにfocus()とするとセットフォーカスされる。) BPageLoadメソッドにて、SetFocus("RadioButtonListコントロールのID")としてもフォーカスが設定されない。 Cクライアントスクリプト(下記ロジック)による実装でも実現できず。 <script Language="JavaScript"><!-- function setfocus(){ document.forms[0].*****.focus(); } window.onload = setfocus; // --></script> (注)*****はRadioButtonListコントロールのID 何か根本的な勘違いをしているのでしょうか。 ご存知の方がいらっしゃいましたら、ご教示のほど、宜しくお願い申し上げます。 | ||||
|
投稿日時: 2006-11-15 16:55
こんにちは。
とりあえず、わかるところだけ。間違っているかもしれないので、あまり信用しないでください orz (丸付き数字は機種依存文字ということでカッコくくりに修正しました) (1) ちょっとわかりません。 MSDN を見ると動きそうな気もしますが、RadioButtonList ということで与えている 名称に問題があるのかもしれません(HTML 上で一意になる名前を与えていないとか)。 http://msdn2.microsoft.com/ja-jp/library/system.web.ui.htmlcontrols.htmlform.defaultfocus(VS.80).aspx (2) (3) Page_Load メソッド(イベント?)はサーバ側の処理なので、そこでフォーカスを設定 してもクライアントはわからないのではないでしょうか。 (4) window.onload ではなく、HTML の body タグあたりに onload イベントを設 定してみるのはどうでしょうか。 この書き方だと「 window というよくわかんねーけど使われたからできちゃった変なオブ ジェクト」の「onload とか言う勝手に宣言されちゃったプロパティ」に setfocus を設 定しているように見えます。 # あと「ご質問」ではなく「質問」で良いですね。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2006-11-16 01:01
多分ここがNG。HTMLを確認してみませう。RadioButtonListのコントロールIDは、 RepeatLayout=Flowの時はSPANタグに RepeatLayout=Tableの時はTABLEタグに なっているのが判る筈です。 | ||||
|
投稿日時: 2006-11-16 08:04
HTMLの
<input id="Radio1" type="radio" ... /> タグはfocusメソッドをサポートしていないようなので Page_LoadイベントハンドラでRadioButtonList1.Focus()メソッドを実行しても 無効になるのでは。 RadioButtonListでFocus()に相当する機能を実現するには、 RadioButtonList1.Items.FindByValue("item2").Selected = True のようにデフォルトのアイテムを選択すべきかと。 ちなみに、RadioButtonList1.Focus()を実行すると WebForm_AutoFocus('RadioButtonList1'); のようなJavaScriptが生成されます。 WebForm_AutoFocus()関数の WebForm_FindFirstFocusableChild(targetControl) でフォーカス可能な子コントロールを検索しています。
_________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2006-11-16 11:09
皆様、ご回答ありがとうございます。
以下の方法で解決致しました。 <解決法> クライアントスクリプト(下記ロジック)により実装。 <script Language="JavaScript"><!-- function setfocus(){ document.forms[0].*****.focus(); } window.onload = setfocus; // --></script> (注)*****はRadioButtonListコントロールのID_0 //最後の2文字を追加。 >まるくさん ご指摘の通りでした。 tableのid=RadioButtonListコントロールのID inputのname=RadioButtonListコントロールのID inputのid=RadioButtonListコントロールのID_N (N:0からの通番) となるのですね。 そして、inputのidにfocusしないとダメ、ということで理解致しました。 >ぽぴ王子さん 機種依存文字や日本語のご指摘、ありがとうございます。 以後注意致します。 (補足) (2)(3)については、Page_Load メソッド(イベント?)でも、そこでフォーカスを設定 してもクライアントは、ちゃんと認識してくれるみたいです。テキストボックスでは間違いなくフォーカス設定されますので。 (4)についても、上述の通り、記述の場所は問題なかったようです。 >Accessさん RadioButtonList1.Items.FindByValue("item2").Selected = True で実現できる「フォーカス」設定と、タブオーダーの「フォーカス」は別物のようです。 前者に関しては、以下のスレッドで議論されているようですね。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5505&forum=7&5 いろいろと勉強になります。皆様、本当にありがとうございます。 今後とも宜しくお願い致します。 | ||||
|
投稿日時: 2006-11-16 12:17
補足です。
(2)(3)のやり方でも、「RadioButtonListコントロール」を「RadioButtonListコントロール_N」(N:0からの通番)とすれば、うまくいきました。 |
1