- PR -

RadioButtonListにフォーカス設定は無理!?

1
投稿者投稿内容
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 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/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 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 を設
定しているように見えます。

# あと「ご質問」ではなく「質問」で良いですね。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2006-11-16 01:01
引用:

  (注)*****はRadioButtonListコントロールのID



多分ここがNG。HTMLを確認してみませう。RadioButtonListのコントロールIDは、
RepeatLayout=Flowの時はSPANタグに
RepeatLayout=Tableの時はTABLEタグに
なっているのが判る筈です。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 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)
でフォーカス可能な子コントロールを検索しています。

コード:
function WebForm_AutoFocus(focusId) {
  var targetControl;
  if (__nonMSDOMBrowser) {
    targetControl = document.getElementById(focusId);
  }
  else {
    targetControl = document.all[focusId];
  }
  var focused = targetControl;
  if (targetControl && (!WebForm_CanFocus(targetControl)) ) {
    focused = WebForm_FindFirstFocusableChild(targetControl);
  }
  if (focused) {
    try {
      focused.focus();
      if (__nonMSDOMBrowser) {
        focused.scrollIntoView(false);
      }
      if (window.__smartNav) {
        window.__smartNav.ae = focused.id;
      }
    }
    catch (e) {
    }
  }
}



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 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/14
投稿数: 28
投稿日時: 2006-11-16 12:17
補足です。

(2)(3)のやり方でも、「RadioButtonListコントロール」を「RadioButtonListコントロール_N」(N:0からの通番)とすれば、うまくいきました。
1

スキルアップ/キャリアアップ(JOB@IT)