回答編集履歴

2

追記

2018/02/19 05:20

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -59,3 +59,79 @@
59
59
  <input type="checkbox" name="child">子4
60
60
 
61
61
  ```
62
+
63
+
64
+
65
+ # 別解
66
+
67
+ ごめんなさい、国語力の問題なので、質問を読み違えていたかもしれません。
68
+
69
+ もし親のチェックボックスの変更で、子が一つしかないときは連動、
70
+
71
+ 子が複数あるときは非連動と読めばこんな感じですかね?
72
+
73
+
74
+
75
+ ※とりあえず今回はjQueryで処理します
76
+
77
+ 仕様があっているならピュアなjavascriptに書き下すことも考えます
78
+
79
+
80
+
81
+ ```javascript
82
+
83
+ $(function(){
84
+
85
+ $('input[type=checkbox]').filter(function(){
86
+
87
+ return $(this).attr('id').match(/^check_\d{2}$/);
88
+
89
+ }).on('change',function(){
90
+
91
+ var flg=$(this).prop('checked');
92
+
93
+ var pid=$(this).attr('id');
94
+
95
+ var child=$('input[type=checkbox]').filter(function(){
96
+
97
+ var reg=new RegExp("^"+pid+"[0-9]{2}$",'g');
98
+
99
+ return $(this).attr('id').match(reg);
100
+
101
+ });
102
+
103
+ child.prop('checked',flg && child.length==1);
104
+
105
+ });
106
+
107
+ });
108
+
109
+ ```
110
+
111
+ ```HTML
112
+
113
+ <div id="group_check_01">
114
+
115
+ <label for="check_01">親チェック<input type="checkbox" value="checkbox" id="check_01"></label><br>
116
+
117
+ <label for="check_0101">子チェック1<input type="checkbox" value="checkbox" id="check_0101"></label><br>
118
+
119
+ <label for="check_0102">子チェック2<input type="checkbox" value="checkbox" id="check_0102"></label><br>
120
+
121
+ </div>
122
+
123
+ <div id="group_check_02">
124
+
125
+ <label for="check_02">親チェック<input type="checkbox" value="checkbox" id="check_02"></label><br>
126
+
127
+ <label for="check_0201">子チェック1<input type="checkbox" value="checkbox" id="check_0201"></label><br>
128
+
129
+ </div>
130
+
131
+ </div>
132
+
133
+ ```
134
+
135
+ ちなみに今回の親子関係をidで紐付けるのはちょっと面倒ですね
136
+
137
+ たとえば親子別々にclassをふって同じdiv内で親子関係を保つとかですかね

1

sample

2018/02/19 05:20

投稿

yambejp
yambejp

スコア114839

test CHANGED
@@ -15,3 +15,47 @@
15
15
  - 子が一つでもチェックが外れたら親のチェックがはずれる
16
16
 
17
17
  - 親がチェックしたら子はすべてチェック
18
+
19
+
20
+
21
+ # sample
22
+
23
+
24
+
25
+ 一応指定通りに書くとこんな感じ
26
+
27
+ ```javascript
28
+
29
+ window.addEventListener('DOMContentLoaded', function(e){
30
+
31
+ document.querySelector('[type=checkbox][name=parent]').addEventListener('change',function(e){
32
+
33
+ var flg=e.target.checked;
34
+
35
+ var len=document.querySelectorAll('[type=checkbox][name=child]:checked').length;
36
+
37
+ Array.prototype.forEach.call(document.querySelectorAll('[type=checkbox][name=child]'),function(x){
38
+
39
+ if(flg) x.checked=(len>=2);
40
+
41
+ });
42
+
43
+ });
44
+
45
+ });
46
+
47
+ ```
48
+
49
+ ```HTML
50
+
51
+ <input type="checkbox" name="parent">親<br>
52
+
53
+ <input type="checkbox" name="child">子1
54
+
55
+ <input type="checkbox" name="child">子2
56
+
57
+ <input type="checkbox" name="child">子3
58
+
59
+ <input type="checkbox" name="child">子4
60
+
61
+ ```