親子関係にあるチェックボックスで親のチェックボックスを選択した際に以下の動作を行うプログラムを作成したいと考えています。
①親のチェックボックスを選択した際に、子のチェックボックスが単数の場合は子のチェックボックスが自動的に選択される。(親と子の選択が連動される。)
②親のチェックボックスを選択した際に、子のチェックボックスが複数の場合は子のチェックボックスが非選択になる。(親と子の選択が連動されない。)
<具体例>------------------------------------------------------------------
■単数の場合 ■複数の場合
☑親チェック ☑親チェック
☑子チェック □子チェック □子チェック
<説明>
■単数の場合
①親にチェックを入れる。
②子が単数なので自動的にチェックする。
■複数の場合
①親にチェックを入れる。
②子が複数なので自動的にチェックしない。
(子にチェックを入れたい場合は、ユーザがブラウザ上からクリックしてチェックを入れる必要がある。)
現時点での自身のプログラム内容は下記のようになっています。
checkbox.html
1<!DOCTYPE HTML> 2 3<html lang="ja"> 4 5<head> 6 7<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> 8 9<META http-equiv="Content-Script-Type" content="text/javascript"> 10 11<title>タイトル</title> 12 13<script type="text/javascript"> 14 15<!-- 16 17function checkParent(obj) { 18 19var parentCheck = obj.checked; 20 21var group = "group_" + obj.id; 22 23var oInputs = document.getElementById(group).getElementsByTagName("input"); 24 25for (var i = 0; i < oInputs.length; i++) { 26 27if (oInputs[i].getAttribute("type") == "checkbox") { 28 29if(i==oInputs.length[0]){ 30 31oInputs[i].checked = parentCheck; 32 33} else { 34 35document.Form.elements["obj"].checked = false ; 36 37} 38 39} 40 41} 42 43function checkChild(obj) { 44 45var childId = obj.id; 46 47var parentId = childId.slice(0,8); 48 49var parentId = document.getElementById(parentId); 50 51var childCheck = childId.checked; 52 53if(!childCheck) { 54 55parentId.checked = false; 56 57} 58 59} 60 61//> 62 63</script> 64 65</head> 66 67<body> 68 69<form> 70 71<div id = "check_group"> 72<div id="group_check_01"> 73 74<label for="check_01">親チェック<input type="checkbox" value="checkbox" id="check_01" onClick="checkParent(this);"></label><br> 75 76<label for="check_0101">子チェック1<input type="checkbox" value="checkbox" id="check_0101" onClick="checkChild(this)"></label><br> 77 78<label for="check_0102">子チェック2<input type="checkbox" value="checkbox" id="check_0102" onClick="checkChild(this)"></label><br> 79 80</div> 81 82 83<div id="group_check_02"> 84 85<label for="check_02">親チェック<input type="checkbox" value="checkbox" id="check_02" onClick="checkParent(this);"></label><br> 86 87<label for="check_0201">子チェック1<input type="checkbox" value="checkbox" id="check_0201" onClick="checkChild(this)"></label><br> 88 89</div> 90</div> 91 92</form> 93 94</body> 95 96</html> 97
htmlに記載されている子のチェックボックスのinputタグ内の末尾に"checked"と記述することで解消される問題でもあります。
しかし、親チェックボックスの数が増えてくると逐一、子のチェックボックスが単数のものに対して"checked"と記述していくのはミスの発生や効率面でも良くないと考えました。(保守性の問題)
そのため今回のようなJavascriptを用いて自動的に単数か複数かを判断して選択するプログラムを作成したいと考えました。
下記のサイトを参考にしてプログラムを作成しているのですが
自身の思うようなプログラムが作れません。
少しでもわかる方はヒントや参考サイトでも構いませんので
教えていただけると助かります。
よろしくお願い致します。
■参考サイト:
http://d.hatena.ne.jp/osakana_21/20080416/1208330846
https://oshiete.goo.ne.jp/qa/1392550.html
回答3件
あなたの回答
tips
プレビュー