![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
リストメニューで選択された項目がアクティブになるようなフォームを作成したいと考えています。
下記コードの上部チェックボックスがselectメニューになっているようなものです。
JavaScriotに関して未熟者ですので、どなたか参考になるご意見/回答を頂けませんでしょうか?宜しくお願いいたします。
<html>
<head>
<title></title>
<script type="text/javascript">
<!--
// 制御用フラグ
// 0なら対象グループは無効(disabled)、1以上なら有効
var FLAG = {
'A':0,
'B':0,
'C':0,
'E':0
};
// 初期化
window.onload = function(){
var controlList = document.getElementById('ctr_FLAG').getElementsByTagName('input');
for(var i=0;controlList[i];i++){
if(controlList[i].checked){
var nameList = controlList[i].value.split(/,/);
for(var j=0;nameList[j];j++){
FLAG[ nameList[j] ]++;
}
}
}
for(var x in FLAG) {
fchk2_sub(x);
}
}
// チェックが変更されたら
function fchk2(obj) {
nameList = obj.value.split(/,/);
for(var i=0;nameList[i];i++) {
if(obj.checked) {
FLAG[nameList[i]]++;
} else {
FLAG[nameList[i]]--;
}
fchk2_sub(nameList[i]);
}
}
// disableの変更
function fchk2_sub(groupe_name,dsiabled_value){
var inputList = document.getElementById('gr_'+groupe_name).getElementsByTagName('input');
for(var i=0;inputList[i];i++) {
inputList[i].disabled = FLAG[groupe_name]>0?false:true;
}
}
//-->
</script>
</head>
<body>
<form name='form2' action='#'>
<p id="ctr_FLAG">
<input type='checkbox' name='chk1' value='A' onclick='fchk2(this)' >
Aをアクティブに<br>
<input type='checkbox' name='chk1' value='A,B' onclick='fchk2(this);' >
AとBをアクティブに<br>
<input type='checkbox' name='chk1' value='A,B,C' onclick='fchk2(this);'>
AとBとCをアクティブに<br>
<input type='checkbox' name='chk12' value='A,B,C,E' onclick='fchk2(this);'>
AとBとCとDをアクティブに</p>
<p>=====================</p>
<p id="gr_A">
<input type='checkbox' name='a1' value='1'> 選択肢A<br>
<input type='checkbox' name='a2' value='1'> 選択肢A<br>
<input type='checkbox' name='a3' value='1'> 選択肢A<br>
</p>
<p id="gr_B">
<input type='checkbox' name='b1' value='1'> 選択肢B<br>
<input type='checkbox' name='b2' value='1'> 選択肢B<br>
<input type='checkbox' name='b3' value='1'> 選択肢B<br>
</p>
<p id="gr_C">
<input type='checkbox' name='c1' value='1'> 選択肢C<br>
<input type='checkbox' name='c2' value='1'> 選択肢C<br>
<input type='checkbox' name='c3' value='1'> 選択肢C<br>
</p>
<p id="gr_E">
<input type='checkbox' name='e1' value='1'> 選択肢E<br>
<input type='checkbox' name='e2' value='1'> 選択肢E<br>
<input type='checkbox' name='e3' value='1'> 選択肢E
</p>
</form>
</body>
</html>
No.2ベストアンサー
- 回答日時:
基本フローとしては常に全部disableにして、必要に応じてdisableを解除
とするとすっきりしますね。
こんな感じでどうでしょう?
<html>
<head>
<title></title>
<script type="text/javascript">
window.onload = function(){
disableAllGr();
}
function disableAllGr(){
var inputList = document.getElementsByTagName('p');
for(var i=0;i<inputList.length;i++){
var obj=inputList[i];
if(obj.id.match(/^gr_/)){
var n=obj.firstChild;
while(n){
if(n.nodeName=="INPUT" && n.type=="checkbox") n.disabled=true;
n=n.nextSibling;
}
}
}
}
function fchk2(obj) {
disableAllGr();
var nameList = obj.value.split(/,/);
for( var i in nameList){
if(!document.getElementById('gr_'+nameList[i])) return false;
var n=document.getElementById('gr_'+nameList[i]).firstChild;
while(n){
if(n.nodeName=="INPUT" && n.type=="checkbox") n.disabled=false;
n=n.nextSibling;
}
}
}
</script>
</head>
<body>
<form>
<p id="ctr_FLAG">
<select onchange='fchk2(this)'>
<option value=''>選択</option>
<option value='A'>Aをアクティブに</option>
<option value='A,B'>AとBをアクティブに</option>
<option value='A,B,C'>AとBとCをアクティブに</option>
<option value='A,B,C,E'>AとBとCとEをアクティブに</p>
</select>
</p>
<p>=====================</p>
<p id="gr_A">
<input type='checkbox' name='a1' value='1'> 選択肢A<br>
<input type='checkbox' name='a2' value='1'> 選択肢A<br>
<input type='checkbox' name='a3' value='1'> 選択肢A<br>
</p>
<p id="gr_B">
<input type='checkbox' name='b1' value='1'> 選択肢B<br>
<input type='checkbox' name='b2' value='1'> 選択肢B<br>
<input type='checkbox' name='b3' value='1'> 選択肢B<br>
</p>
<p id="gr_C">
<input type='checkbox' name='c1' value='1'> 選択肢C<br>
<input type='checkbox' name='c2' value='1'> 選択肢C<br>
<input type='checkbox' name='c3' value='1'> 選択肢C<br>
</p>
<p id="gr_E">
<input type='checkbox' name='e1' value='1'> 選択肢E<br>
<input type='checkbox' name='e2' value='1'> 選択肢E<br>
<input type='checkbox' name='e3' value='1'> 選択肢E
</p>
</form>
</body>
</html>
No.1
- 回答日時:
HTML部分は好みで色々変えた。
あくまでサンプルなんで自分流に直して試してみて。
スクリプト
function gr_ctrl(){
var S=document.getElementById('ctr_FLAG');
for(var i=0;S.options[i];i++){
var C=document.getElementById(S.options[i].value).getElementsByTagName('input');
for(var j=0;C[j];j++) C[j].disabled = !S.options[i].selected;
}
}
window.onload=gr_ctrl;
HTML
<form>
<p><select size="2" multiple id="ctr_FLAG" onchange="gr_ctrl()">
<option value="gr_A">A</option>
<option value="gr_B">B</option>
</select></p>
<fieldset id="gr_A"><legend>グループA</legend>
<ul>
<li><input type="checkbox" value="1" name="a1" id="a1"> <label for="a1">選択肢a1</label></li>
<li><input type="checkbox" value="1" name="a2" id="a2"> <label for="a2">選択肢a2</label></li>
<li><input type="checkbox" value="1" name="a3" id="a3"> <label for="a3">選択肢a3</label></li>
</ul>
</fieldset>
<fieldset id="gr_B"><legend>グループB</legend>
<ul>
<li><input type="checkbox" value="1" name="b1" id="b1"> <label for="b1">選択肢b1</label></li>
<li><input type="checkbox" value="1" name="b2" id="b2"> <label for="b2">選択肢b2</label></li>
<li><input type="checkbox" value="1" name="b3" id="b3"> <label for="b3">選択肢b3</label></li>
</ul>
</fieldset>
</form>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームのチェックボックスの...
-
チェックボックスのON/OFFでVal...
-
【jsp/Java】チェックボックス...
-
複数のチェックボックス項目が...
-
チェックボックスのON/OFFに応...
-
チェックボックスとラジオボタ...
-
チェックボックス制御2つ以上...
-
C# からIE操作について
-
javascript 「折りたためるリス...
-
return trueとreturn falseの用...
-
JavaScriptで<select>の<option...
-
複数のselect値で1つも選択され...
-
全てのselect要素をデフォルト...
-
idの振り直しについて
-
html selectの内容を初期値に戻す
-
selectボックスで選択数を制限...
-
jQuery セレクトボックスで選択...
-
ラジオボタンで選択変更
-
プルダウン 項目が多いので先頭...
-
onchangeイベントを強制的に発...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスのON/OFFでVal...
-
【jsp/Java】チェックボックス...
-
チェックボックスのON/OFFに応...
-
背景色を変えて未入力チェック...
-
チェックボックスの設定
-
checkboxをクリックしてリロー...
-
JSP内で可変するチェックボック...
-
チェックボックスが複数ある場...
-
一つのチェックボックスのON/OF...
-
EclipseでSpringを使用し、テー...
-
チェックボックスで指定したも...
-
チェックが入っていなかったら...
-
チェックボックスに全てチェッ...
-
複数のチェックボックス項目が...
-
checkboxの選択数制限と排他処...
-
特定のID(またはクラス)で括ら...
-
Objective-Cでチェックボックス...
-
配列のチェックボックスをjavas...
-
確認ページからフォームページ...
-
複数あるチェックボックスから...
おすすめ情報