アプリ版:「スタンプのみでお礼する」機能のリリースについて

次の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>

A 回答 (2件)

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>
    • good
    • 0
この回答へのお礼

EURさん、別のスレでもお世話になりました。
こちらも大変汎用性が高いです。
野菜、肉魚にも適用できるという
要望以上のものをご提示いただけたおかげで
今作っているページをもっとよくばりに
作っちゃいそうです(^^;

本当にありがとうございました。

#すみません、本来20pt入力させていただきたい
ところですが、別レスでの20ptに免じて
今回は別の回答者様への20として
ご容赦いただけますと幸いです。

お礼日時:2005/07/12 12:38

<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>
    • good
    • 0
この回答へのお礼

jchさん、ご教示ありがとうございました。

早速動作確認させていただいたところ、
まさに要望どおり完璧な動作です!

スクリプトも整然としていて
わたしでもよくわかりました。
本当に勉強になりました。

お礼日時:2005/07/12 12:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!