- ベストアンサー
ラジオボタンについて
こんにちは。ラジオボタンについて質問させてください。 <input type="radio" name="area" value="all" onClick="area.value = 'all'" checked>ALL<br> <input type="radio" name="area" value="a" onClick="area.value = 'a'">A<br> <input type="radio" name="area" value="b" onClick="area.value = 'b'">B<br> というHTMLを記述しました。 画面が表示された後にラジオボタンをチェックして実行(別個作成)すると うまく動作するのですが、チェックボタンをチェックしずに (デフォルトの'ALL'選択のまま)実行するとうまくいきません。 どのようにすればうまく動作するのでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 ちょっと大雑把なfunction名ですが、以下で動作すると思います。 試してみて下さい。 <html><head> <script language="javascript"> <!-- var areaV="all"; function flag(n){ areaV=n; } function goDetailX(fm) { if(areaV == 'all'){ alert("ALLは×"); }else{ alert("ALL以外は○"); } return false; } //--> </script> </head> <body> <form name="fm1" method="get" onsubmit="return goDetailX(this);"> <input type="radio" name="area" value="all" onClick="flag('all')" checked>ALL<br> <input type="radio" name="area" value="a" onClick="flag('a')">A<br> <input type="radio" name="area" value="b" onClick="flag('n')">B<br> <input type="submit" value="検 索" > </form> </body></html>
その他の回答 (5)
- mirurin
- ベストアンサー率43% (48/111)
ラジオボタンの名前を変えてareaという隠しフィールドを 作ればどうかと思ったんですけど、どうでしょう? <form name="fm1" method="get" onsubmit="return goDetailX(this);"> <input type="radio" name="_area" value="all" onClick="area.value = 'all'" checked>ALL<br> <input type="radio" name="_area" value="a" onClick="area.value = 'a'">A<br> <input type="radio" name="_area" value="b" onClick="area.value = 'b'">B<br> <input type="hidden" name="area" value="all"> <input type="submit" value="検 索" > </form>
お礼
残念ながらうまくいきませんでした。 すみません。ご迷惑をおかけして・・・ 私のソースがおかしいのですかねぇ・・・・ ありがとうございました。
- nuki
- ベストアンサー率30% (6/20)
解決方法を3つ思いつくことができました。 私の個人的な意見としては、不必要なJavaScriptは利用しない方が好ましいという観点から、3のHTMLの仕様で解決する方法をお勧めしたいです。 1.JavaScript関数の追加で解決する bodyタグにonloadイベントを追加してJavaScript関数を呼び出し、その中で初期選択状態を設定する方法。 <head> (省略) <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> function doLoad() { document.example_name.area.value = 'all'; } (省略) </script> </head> <body onload="doLoad()"> (省略) <form name="example_name" (省略)> <input name="area" type="hidden"> (省略) <input name="open_area" type="radio" value="a" onclick="area.value = 'a'"> (以下略) onloadイベントはhtmlが全て読み込まれてから呼び出されるので、areaオブジェクトは必ず存在すると見なせます。 2.既存ソースへの変更を最小限にする 恐らくhidden指定されているareaオブジェクトに初期値を設定してしまう方法。 (省略) <input name="area" type="hidden" value="all"> (以下略) 3.HTMLの仕様で解決する JavaScriptで別のhiddenフィールドに値を設定することを止める方法。 作業手順としては、既存のラジオボタンのフィールド名(open_area)を全てareaに変更し、hiddenフィールドを削除してしまう。合わせて、ラジオボタンフィールドに追加していたonclickイベントも削除する。 (省略) <form (省略)> <input name="area" type="radio" value="all"> (以下省略)
お礼
<html><head> <script language="javascript"> <!-- Begin function goDetailX(fm) { if(fm.area.value == 'all'){ alert("ALLは×"); }else{ alert("ALL以外は○"); } return false; } // End --> </script> </head> <body> <form name="fm1" method="get" onsubmit="return goDetailX(this);"> <input type="radio" name="area" value="all" onClick="area.value = 'all'" checked>ALL<br> <input type="radio" name="area" value="a" onClick="area.value = 'a'">A<br> <input type="radio" name="area" value="b" onClick="area.value = 'b'">B<br> <input type="submit" value="検 索" > </form> </body></html> いろいろな方の意見を聞いて簡単なものを作りました。 これもうまく動作しません。(動作状況は補足に詳しく書いてあります)
補足
ご回答ありがとうございます。 まず、nukiさんの ●提案1について 個人的に一番きにいりました。 問題点としてHEDER部分表示は関数を使用しています(<body>タグまで) なので厳しいです。すみません。 ●提案2について やってみましたが、結果的に同じでした(泣) ●提案3について 本当にすみません。下記の方の補足で記述したソースのopen_areaはすべて areaの間違いです・・・。すみません。 現在私がやりたいのは 実行ボタンをクリック時にラジオボタンのクリック状況をチェックすることです。 'ALL'だった場合はメッセージを表示させるということです。 たとえば最初に表示するファイルをfirst.phpとして次に表示するファイルを second.phpとします。 実行ボタンクリック時にsecond.php起動の前に javascriptでalert(fm.area.value)を表示させると デフォルトでは'UNDEFINED'と表示され、 他のボタンは'A', 'B', また他のボタンクリック後に'ALL'をクリックすると 'ALL'が表示されます。(もちろんこのjavascriptはfirst.phpで記述) デフォルト表示後、実行ボタンをクリックしてsecond.php表示後、 IEのURLには ' ・・・・ &area=all&・・・'なんて出てます・・・ なんかいろんな人に回答していただいて、うまく動かなくて大変申し訳ないです。
- mirurin
- ベストアンサー率43% (48/111)
> 実行するとうまくいきません。 どのようになるのですか?エラーが出るのですか? 実行部分のスクリプトを簡単にでも書いていただければ わかるかも知れませんが・・。
補足
-------------- 省略 -------------- <fieldset style="width = 300"> <Legend><font size="+2"><b>選択</b></font></Legend> <input type="radio" name ="area" value="all" checked onClick="area.value = 'all'">ALL<br> <?php -------------- 省略 -------------- for($iCnt=1;$iCnt<$work;$iCnt++){ ?> <input type="radio" name="open_area" value="<?=$BOX[$iCnt] [0]? >" onClick="area.value = '<?=$BOX[$iCnt][0]?>'"> <?=$BOX[$iCnt][4]?><br> <?php } ?> </fieldset> -------------- 省略 -------------- 状況説明なしで失礼しました。 HTMLとPHPで作成しています。 ラジオボックスで選択された内容に対して処理を分けようと考えています。 $BOXは連想配列でそれぞれ情報が格納されています。 たとえば現段階ではラジオボタンが3つ表示されるとします。 ●ALL ○A ○B 【開始ボタン】 と上記のように表示されます。 ※上記では<form>タグは省略されていますが、作成することになります。 (ほかのPHPを起動させる) ■例1 ○ALL ●A ○B 【開始ボタン】(クリック) とすると'A'の情報が表示されるようになります。 ■例2 ○ALL ○A ●B 【開始ボタン】 ↓ ●ALL ○A ○B 【開始ボタン】(クリック) とすると'ALL'の情報が表示されるようになります。 ■例3 ●ALL ○A ○B 【開始ボタン】(クリック) が今問題になっています。 基本的に次の画面に移る際に引数areaを参照して SQLを走らせています。なのでデフォルト状態でいきなり開始ボタンを 押下すると引数が入っておらずSQLが走らない状態です。 こんな説明でわかっていただけるでしょうか?
- mirurin
- ベストアンサー率43% (48/111)
<input type="radio" name="area" value="all" onClick="area.value = 'all'" checked>ALL<br> <input type="radio" name="area" value="a" onClick="area.value = 'a'">A<br> <input type="radio" name="area" value="b" onClick="area.value = 'b'">B<br> <script language="JavaScript"> area.value = 'all'; </script> こんなふうにareaにデフォルトで値をいれておけばどうでしょう?
補足
>・・・ onClick="area.value = 'all'" checked>ALL<br> と上記のようにしましたが同じでした。 状況としてはNO1さんに書いた補足と同じ動作のままでした。 普通(?)なら上記のソースで希望した動きができるはずですよね?
- Black_Tiger
- ベストアンサー率21% (300/1391)
こんにちは。 <INPUT type="radio" name="area" value="ALL" checked>ALL <INPUT type="radio" name="area" value="B">A <INPUT type="radio" name="area" value="B">B 上記はBTの作成したとあるHPからの引用です。 これでもNGですか?
補足
上記のようにしたのですができませんでした。 基本的に画面表示後は'ALL'にチェックはついています。 いったん'A'や'B'をクリックしてまた'ALL'をチェックすると 実行ができます・・・(泣) ちなみにデフォルト表示後にもう一度上から'ALL'をチェックすると 正常に動作します。
お礼
うぅ、うまくいきまいた。 areaの変数にうまくデータが渡せていなかったので 別の変数を用意するのは気づきませんでした。 ありがとうございました。 皆さんにいろいろご迷惑をおかけしました。 詳しい回答、ご意見をいただいた皆さん、 本当にありがとうございました!! m(_ _)m m(_ _)m m(_ _)m m(_ _)m m(_ _)m m(_ _)m m(_ _)m m(_ _)m