次の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>
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>
EURさん、別のスレでもお世話になりました。
こちらも大変汎用性が高いです。
野菜、肉魚にも適用できるという
要望以上のものをご提示いただけたおかげで
今作っているページをもっとよくばりに
作っちゃいそうです(^^;
本当にありがとうございました。
#すみません、本来20pt入力させていただきたい
ところですが、別レスでの20ptに免じて
今回は別の回答者様への20として
ご容赦いただけますと幸いです。
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>
jchさん、ご教示ありがとうございました。
早速動作確認させていただいたところ、
まさに要望どおり完璧な動作です!
スクリプトも整然としていて
わたしでもよくわかりました。
本当に勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
return trueとreturn falseの用...
-
未入力のラジオボタンに、alert...
-
ラジオボタンのNullチェック
-
正規表現で複数マッチ条件で悩...
-
プルダウンメニューを選択して...
-
Tabキーでのカーソルの移動...
-
COBOLの数字チェック
-
JavaScript ログアウト処理
-
フォームの入力チェックをする...
-
プルダウン 項目が多いので先頭...
-
submitボタン押下時にPOSTされ...
-
value内に変数を入れたい
-
大文字か小文字かを判断する方法
-
テーブルの行数を可変長にした...
-
【jQuery】input nameの文字列...
-
localStorageでのcheckbox制御
-
CSVファイルを読みこみ、プルダ...
-
Selectの中身をfor文で入れる
-
selectを変更不可にしたい
-
onClickとsubmitの処理順序
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
return trueとreturn falseの用...
-
正規表現で複数マッチ条件で悩...
-
JavaScriptde途中で、「exit」...
-
slickのレスポンシブ > center...
-
COBOLの数字チェック
-
チェックボックスの有無判定
-
フォームの入力チェックをする...
-
Visual Studioのデザインでの非...
-
Tabキーでのカーソルの移動...
-
ツリービューのチェックボック...
-
ドロップダウンリストボックス...
-
コピペを禁止するtextarea
-
ラジオボタンのNullチェック
-
未入力のラジオボタンに、alert...
-
form の onSubmit がコールされ...
-
分岐数といえば
-
JSのみで入力→確認→メールで送...
-
JavaScript ログアウト処理
-
TEXTAREAに入力した改行コード...
-
リロードしないようにするには
おすすめ情報