
ラジオボタンとプルダウンを連動させたい
いつもお世話になっております。
ラジオボタンのvalue値に連動してプルダウンの内容が変わるということがしたいと思い、
数日前からいろいろと格闘していましたが、煮詰まったため相談に伺いました。
http://oshiete.goo.ne.jp/qa/2928590.htmlのANo.2の回答
--------------------------------------------------------------------
<script language="javascript">
function changeFunc(obj){
var v=obj.value;
var f=obj.form;
for(var i=0;i<f.length;i++){
if(f[i].type=="checkbox"){
if(f[i].className==v || v=="") f[i].disabled=false;
else f[i].disabled=true;
}
}
}
</script>
<form>
<select name="genre" onChange="changeFunc(this)">
<option value="">食べ物</option>
<option value="grain">穀物</option>
<option value="fruit">果物</option>
<option value="meat">生き物</option>
</select>
<br />
<input type="checkbox" value="お米" class="grain">お米<br />
<input type="checkbox" value="そば" class="grain">そば<br />
<input type="checkbox" value="りんご" class="fruit">りんご<br />
<input type="checkbox" value="みかん" class="fruit">みかん<br />
<input type="checkbox" value="さかな" class="meat">さかな<br />
<input type="checkbox" value="豚肉" class="meat">豚肉
</form>
--------------------------------------------------------------------
を参考にいろいろと試してはみたのですが、こちらは「プルダウン→チェックボックス」で、
まったく逆でどうしたら良いのかまったくわかりませんでした。
他のウェブサイトの情報やサンプルも試したのですが、value値やname値他の問題でうまくできませんでした。
希望の仕様は
・ラジオボタンの選択肢によって、プルダウン(セレクトボックス)の内容が変わる(アイテムが消える、または選択できなくなる)。
・ラジオボタン・プルダウン共にvalue値・name値は決まったものがある(プルダウンのvalue値は日本語)
以上です。
javascriptは素人ですので、わかりにくい質問になっているかもしれないのですが、お力を貸していただけましたら助かります。
よろしくお願いします。
No.6ベストアンサー
- 回答日時:
もし、これで合っていたらお慰み。
違うなら誰か正解を書いてください;
<script type="text/javascript">
<!--
document./*@cc_on @if(@_jscript)attachEvent('on'+ @else@*/addEventListener(/*@end@*/
'click', function( evt ){
var tgt = evt./*@if(@_jscript)srcElement@else@*/target/*@end@*/;
if( tgt.nodeName.toLowerCase()=="input" && tgt.type=="radio" && tgt.name=="r1" ){
if( tgt.form == document.forms["form1"] ){
var opt = document.forms["form1"].elements["genre"].options;
opt[0].selected = true;//選択を「食べ物」にリセット
for( var i = 1; i < opt.length; i++ ){
opt[i].disabled = opt[i].className.match(tgt.id)?false:true;
}
}
}
}, false );
//-->
</script>
</head>
<body>
<form name="form1" id="form1" action="#">
<p>
<!--<input type="radio" name="r1" value="すべて" id="food" checked>
<label>すべて</label>-->
<input type="radio" name="r1" value="穀物" id="grain">
<label for="grain">穀物</label>
<input type="radio" name="r1" value="果物" id="fruit">
<label for="fruit">果物</label>
<input type="radio" name="r1" value="生き物" id="meat">
<label for="meat">生き物</label>
</p>
<!--▼追加ここから-->
<p>
<input type="radio" name="tuika" value="テスト1" id="test1">
<label for="test1">テスト1</label>
<input type="radio" name="tuika" value="テスト2" id="test2">
<label for="test2">テスト2</label>
<input type="radio" name="tuika" value="テスト3" id="test3">
<label for="test3">テスト3</label>
</p>
<!--▲追加ここまで-->
<p>
<select name="genre">
<option value="食べ物" class="food" selected>食べ物</option>
<option value="お米" class="grain food">お米</option>
<option value="そば" class="grain food">そば</option>
<option value="りんご" class="fruit food">りんご</option>
<option value="みかん" class="fruit food">みかん</option>
<option value="さかな" class="meat food">さかな</option>
<option value="豚肉" class="meat food">豚肉</option>
</select>
</p>
</form>
</body>
</html>
お礼が遅くなり、申し訳ありませんでした。
無事に動作しました。
何度も回答をいただき、貴重な知識とお時間を本当にありがとうございました!
No.4
- 回答日時:
#2です。
それでしたら、
var elm = obj.elements["r1"];
に変えるか、もっと短く、
var obj = document.getElementById("form1");
var elm = obj.elements["r1"];
↓
var elm = document.getElementById("form1").elements["r1"];
にしてください。
プルダウンを操作するラヂオボタンのnameをr1のところに入れます。
そこを間違ってたのに後で気づいたんですが、
訂正するのを手抜きしました、すいません^^;
あともう1個、
var s = this.form.elements["genre"], opt = s.options;
↓
var opt = this.form.elements["genre"].options;
sはどこにも使って無いので意味なしでした。
No.3
- 回答日時:
オプションをdisableにするだけじゃなく、非表示にしたいなら
<option value="none" selected>選択して下さい</option>
も追加しといた上で、changeFunc()の中で、
f.genre.options[0].selected=true;
と、
options[i].style.display=(options[i].className.match(class))?"block":"none";
も追加すればよいかな。(<option>ってblock要素だったっけ?)
後、一個一個にonChange="changeFunc(this)を付けるのが面倒なら、
イベントリスナーの追加処理ですね(省略)。
それにしても、最近のブラウザーは「W3C Selectors API Level 1」
てのを実装してるので、
document.querySelectorAll("セレクター");
を使ってもっと簡単にかけるぞ。
http://www.w3.org/TR/selectors-api/
(参考)Selectors APIの実装状況(2009年9月時点の物)
IE8以上、Firefox3.5以上、safari4.0以上、opera10以上、Google chrome
ならほぼ大丈夫。
http://journal.mycom.co.jp/photo/articles/2009/0 …
ご回答いただき、ありがとうございました。
非表示したいなと思い、じっくりと10回ほど読ませて頂いたのですが、
私にはまったく理解できませんでした……。
もう少し勉強して、理解できるようになったら非表示もチャレンジしたい
と思います。
このたびはありがとうございました!
No.2
- 回答日時:
radioボタン選択でselectで選べる項目を限定すればいいんですよね?
こうじゃないのかなぁ。
「食べ物」はすべてに共通しているのでdisabledしないようにするとか。
<script type="text/javascript">
<!--
var addEvent = document.addEventListener?
function( node, type, handler ){ node.addEventListener( type, handler, false ); }:
function( node, type, handler ){ node.attachEvent( 'on' + type, function( evt ){ handler.call( node, evt );});};
addEvent( window, "load", function(){
var obj = document.getElementById("form1");
var elm = obj.getElementsByTagName("INPUT");
for( var i = 0; i < elm.length; i++ ){
if( elm[i].type != "radio" ) continue;
addEvent( elm[i], "click", function(){
var s = this.form.elements["genre"], opt = s.options;
opt[0].selected = true;//選択を「食べ物」にリセット
//optionのclass名がradioのidと一致したらdisabled=false
for( var i = 1; i < opt.length; i++ ){
opt[i].disabled=opt[i].className.match(this.id)?false:true;
}
});
}
});
//-->
</script>
</head>
<body>
<form name="form1" id="form1" action="#">
<p>
<input type="radio" name="r1" value="すべて" id="food" checked>
<label for="food">すべて</label>
<input type="radio" name="r1" value="穀物" id="grain">
<label for="grain">穀物</label>
<input type="radio" name="r1" value="果物" id="fruit">
<label for="fruit">果物</label>
<input type="radio" name="r1" value="生き物" id="meat">
<label for="meat">生き物</label>
</p>
<p>
<select name="genre">
<option value="食べ物" class="food" selected>食べ物</option>
<option value="お米" class="grain food">お米</option>
<option value="そば" class="grain food">そば</option>
<option value="りんご" class="fruit food">りんご</option>
<option value="みかん" class="fruit food">みかん</option>
<option value="さかな" class="meat food">さかな</option>
<option value="豚肉" class="meat food">豚肉</option>
</select>
</p>
</form>
</body>
</html>
ご回答ありがとうございました。
すごい! ちゃんと選択できなくなりました。ありがとうございます!
それで、もしこちらをご覧になっていたらもうひとつご教示いただけないでしょうか。
いただいたサンプルのラジオボタンの選択肢とプルダウンの間に、もうひとつラジオボタンを入れました。
今回の動作には関係のないものなのですが、そちらにチェックを入れると、プルダウンの非選択が部分的におかしくなってしまいます(プルダウンのすべてが非選択になります)。
------------------------------------------------
<form name="form1" id="form1" action="#">
<p>
<!--ここにあった<input type="radio" name="r1" value="すべて" id="food" checked>の選択肢を削除しました-->
<input type="radio" name="r1" value="穀物" id="grain">
<label for="grain">穀物</label>
<input type="radio" name="r1" value="果物" id="fruit">
<label for="fruit">果物</label>
<input type="radio" name="r1" value="生き物" id="meat">
<label for="meat">生き物</label>
</p>
<!--▼追加ここから-->
<p>
<input type="radio" name="tuika" value="テスト1" id="test1">
<label for="test1">テスト1</label>
<input type="radio" name="tuika" value="テスト2" id="test2">
<label for="test2">テスト2</label>
<input type="radio" name="tuika" value="テスト3" id="test3">
<label for="test3">テスト3</label>
</p>
<!--▲追加ここまで-->
<p>
<select name="genre">
<option value="食べ物" class="food" selected>食べ物</option>
<option value="お米" class="grain food">お米</option>
<option value="そば" class="grain food">そば</option>
<option value="りんご" class="fruit food">りんご</option>
<option value="みかん" class="fruit food">みかん</option>
<option value="さかな" class="meat food">さかな</option>
<option value="豚肉" class="meat food">豚肉</option>
</select>
</p>
</form>
------------------------------------------------
解決方法がありましたら、教えていただけましたら助かります。
よろしくお願いします。
No.1
- 回答日時:
とり急ぎ、似たようなロジックで、
2つ以上チェックされた時どうされたいか書いてないので、
一つしかチェックできないようにしてあります。
(2つ以上チェックの改造は簡単、前半をコメントアウトするだけ)
※全角空白は半角空白にしてね
<script type="text/javascript">
function changeFunc(obj){
var f=obj.form;
//ここから一つしかチェックできないようにする処理
var chkboxs=f.getElementsByTagName("input");
for(var i=0;i<chkboxs.length;i++){
if(chkboxs[i].getAttribute("type")=="checkbox" && chkboxs[i]!=obj)
chkboxs[i].checked=false;
}
//ここから、チェックされたクラスのオプションを不可にする処理
var class=(obj.checked)?obj.value:"";
var options=f.getElementsByTagName("option");
for(var i=0;i<options.length;i++){
options[i].disabled=true;
options[i].disabled=(options[i].className.match(class))?false:true;
}
}
</script>
<form>
<input type="checkbox" value="food" onChange="changeFunc(this)">食べ物</option><br>
<input type="checkbox" value="grain" onChange="changeFunc(this)">穀物</option><br>
<input type="checkbox" value="fruit" onChange="changeFunc(this)">果物</option><br>
<input type="checkbox" value="meat" onChange="changeFunc(this)">生き物</option><br>
<select name="genre">
<option value="お米" class="grain food">お米
<option value="そば" class="grain food">そば
<option value="りんご" class="fruit food">りんご
<option value="みかん" class="fruit food">みかん
<option value="さかな" class="meat food">さかな
<option value="豚肉" class="meat food">豚肉
</select>
</form>
</body>
ご回答いただき、ありがとうございました。
今回はラジオボタンなので1箇所指定ですが、次の機会に
サンプルを参考にさせていただきます。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<input>の選択肢をプルダウンメ...
-
同一IDで個数を分けたい。
-
プルダウンメニューのvalue値取...
-
プルダウン選択を変更すると、...
-
スマホのフォームでのselect複...
-
二つのセレクトボックス間での...
-
初心者です。javascript の pla...
-
return falseが効かない
-
console.logがどうしても2つ機...
-
javascript-変数がよくわかりま...
-
【JS】selectでchangeした時の...
-
超初心者です。buttonをselect...
-
プルダウンのoptionの表示・非...
-
jsでは、'で区切った部分を改行...
-
javascriptでセレクトボックス...
-
全てのselect要素をデフォルト...
-
addclassがうまく働きません
-
セレクトボックスを2つ選択して...
-
プルダウンメニューに連動する...
-
JavaScriptで<select>の<option...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン選択を変更すると、...
-
<input>の選択肢をプルダウンメ...
-
selectを変更不可にしたい
-
Selectボックスの一覧表示方法
-
同じ名前のセレクトがある場合...
-
スマホのフォームでのselect複...
-
全てのselect要素をデフォルト...
-
セレクトボックスで配列を呼び...
-
JavaScriptで<select>の<option...
-
javascriptでセレクトボックス...
-
プルダウンの値によって活性・...
-
ラジオボタンの値が取得できな...
-
複数プルダウンで検索
-
javascript:データを日本語で...
-
selectのnameが配列の場合
-
フォームセレクトに項目を追加...
-
select要素のvalueを配列で取得...
-
プルダウンのoptionの表示・非...
-
selectのすべての値を送信する方法
-
ラジオボタンとプルダウンを連...
おすすめ情報