• ベストアンサー

チェックに応じて違うチェックボックスをアクティブにしたい

次のHTMLのように、大分類、小分類のような構成のチェックボックス グループがあります(初期設定は全部チェック無しです) 普段は[a][b][c][d]をdisableとしておき、(1) にチェックが入った 場合に[d]以外([a][b][c])アクティブ(?とにかくチェックを入れる ことができる)ようにするにはどうしたらいいでしょうか。 よろしくお願い致します。 <form id="Form1"> : <INPUT TYPE="CHECKBOX" NAME="food" value="果物">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ : </form>

質問者が選んだベストアンサー

  • ベストアンサー
  • jch
  • ベストアンサー率38% (7/18)
回答No.2

<html> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>Test</title> <SCRIPT LANGUAGE="JavaScript"> <!-- function check() { var v = document.kkk.food[0].checked; for(var i=0; i<3; i++){ if(v) { document.kkk.fruit[i].disabled = false } else { document.kkk.fruit[i].disabled= true; } } document.kkk.fruit[3].disabled= true; } function oncheck() { for(var i=0; i<4; i++){ document.kkk.fruit[i].checked= false; document.kkk.fruit[i].disabled= true; } for(var i=0; i<3; i++){ document.kkk.food[i].checked= false; } } //--> </SCRIPT> </head> <body onload="oncheck()"> <hr><p> <CENTER>タイムアウト発生</CENTER> <p> <form id="Form1" name = "kkk"> <INPUT TYPE="CHECKBOX" NAME="food" value="果物" onclick="check();">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ </form></p> <hr> <p></p> </body> </html>

litton101
質問者

お礼

jchさん、ご教示ありがとうございました。 早速動作確認させていただいたところ、 まさに要望どおり完璧な動作です! スクリプトも整然としていて わたしでもよくわかりました。 本当に勉強になりました。

その他の回答 (1)

  • EUR
  • ベストアンサー率61% (29/47)
回答No.1

javascriptにて、果物、野菜、魚肉のリストを作り、disabledを変更しています。 注意ですが、リストを作る際に、取得したエレメントが1つしかなかった場合、リストのlenghtはundifinedになってしまいます。 これを避けるために、リストを生成し、disabledを変更するときに、場合わけとして、 1.if (FruitLists && FruitList.length) リストに要素があり、かつlengthが取得できる(リストが2以上) 2.else if (FruitLists) 1ではないが、リストに要素がある(要素数が1) を行っています。 以下ソースです。 <HTML> <head> <script language="javascript"> function checkFood(kind, FoodForm) {   FruitLists = document.forms("Form1").elements("fruit");   VegetableLists = document.forms("Form1").elements("vegetable");   MeatLists = document.forms("Form1").elements("meat");      switch (kind) {   case "fruit":     if (FoodForm.checked == true) {       //フルーツをチェック可能に       if (FruitLists && FruitLists.length) {         for (i = 0; i < FruitLists.length; i++) {           FruitLists[i].disabled = false;         }       } else if (FruitLists) {         FruitLists.disabled = false;       } else {       }     } else {       //フルーツをチェック不可能に       if (FruitLists && FruitLists.length) {         for (i = 0; i < FruitLists.length; i++) {           FruitLists[i].disabled = true;         }       } else if (FruitLists) {         FruitLists.disabled = true;       } else {       }     }   break;   case "vegetable":     if (FoodForm.checked == true) {       //野菜をチェック可能に       if (VegetableLists && VegetableLists.length > 1) {         for (i = 0; i < VegetableLists.length; i++) {           VegetableLists[i].disabled = false;         }       } else if (VegetableLists) {         VegetableLists.disabled = false;       } else {       }     } else {       //野菜をチェック不可能に       if (VegetableLists && VegetableLists.length > 1) {         for (i = 0; i < VegetableLists.length; i++) {           VegetableLists[i].disabled = true;         }       } else if (VegetableLists) {         VegetableLists.disabled = true;       } else {       }     }   break;   case "meat":     if (FoodForm.checked == true) {       //魚肉をチェック可能に       if (MeatLists && MeatLists.length) {         for (i = 0; i < MeatLists.length; i++) {           MeatLists[i].disabled = false;         }       } else if (MeatLists) {         MeatLists.disabled = false;       } else {       }     } else {       //魚肉をチェック不可能に       if (MeatLists && MeatLists.length) {         for (i = 0; i < MeatLists.length; i++) {           MeatLists[i].disabled = true;         }       } else if (MeatLists) {         MeatLists.disabled = true;       } else {       }     }   break;   default:   } } </script> </head> <body> <form id="Form1"> : <INPUT TYPE="CHECKBOX" NAME="food" value="果物" onClick="checkFood('fruit', this)">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜" onClick="checkFood('vegetable', this)">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚" onClick="checkFood('meat', this)">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご" disabled>[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん" disabled>[b] みかん <INPUT TYPE="CHECKBOX" NAME="vegetable" value="キャベツ" disabled>[c] キャベツ <INPUT TYPE="CHECKBOX" NAME="meat" value="牛肉" disabled>[d] 牛肉 <INPUT TYPE="CHECKBOX" NAME="meat" value="魚" disabled>[e] 魚 : </form> </body> </HTML>

litton101
質問者

お礼

EURさん、別のスレでもお世話になりました。 こちらも大変汎用性が高いです。 野菜、肉魚にも適用できるという 要望以上のものをご提示いただけたおかげで 今作っているページをもっとよくばりに 作っちゃいそうです(^^; 本当にありがとうございました。 #すみません、本来20pt入力させていただきたい ところですが、別レスでの20ptに免じて 今回は別の回答者様への20として ご容赦いただけますと幸いです。

関連するQ&A