質問するログイン新規登録

回答編集履歴

2

個別チェック時の処理の解釈が誤っていたのを修正

2016/03/16 09:00

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  擬似クラス `:checked` を使いますが、Selectors API 4 の `:has` がないと現行HTMLでは実現不可能なので構造を変えます。
2
2
  (JavaScript 無効では「全てチェック/解除」が不要なコンテンツとして残るのでJavaScriptで「全てチェック/解除」を生成するようにしました。)
3
3
 
4
- - [input[type=checkbox] を全てチェックする - JSFiddle](https://jsfiddle.net/kw3uaqv4/2/)
4
+ - [input[type=checkbox] を全てチェックする - JSFiddle](https://jsfiddle.net/kw3uaqv4/3/)
5
5
 
6
6
  ```html
7
7
  <style>
@@ -85,4 +85,8 @@
85
85
  </form>
86
86
  ```
87
87
 
88
+ **(更新履歴)**
89
+ - 2016/03/16 17:11 changeイベントに変更。個別チェック時に一括チェックと連動するように修正。
90
+ - 2016/03/16 18:00 個別チェック時の処理の解釈が誤っていたのを修正
91
+
88
92
  Re: ao_love さん

1

changeイベントに変更。個別チェック時に一括チェックと連動するように修正。

2016/03/16 09:00

投稿

think49
think49

スコア18194

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  擬似クラス `:checked` を使いますが、Selectors API 4 の `:has` がないと現行HTMLでは実現不可能なので構造を変えます。
2
2
  (JavaScript 無効では「全てチェック/解除」が不要なコンテンツとして残るのでJavaScriptで「全てチェック/解除」を生成するようにしました。)
3
3
 
4
- - [input[type=checkbox] を全てチェックする - JSFiddle](https://jsfiddle.net/kw3uaqv4/1/)
4
+ - [input[type=checkbox] を全てチェックする - JSFiddle](https://jsfiddle.net/kw3uaqv4/2/)
5
5
 
6
6
  ```html
7
7
  <style>
@@ -20,17 +20,20 @@
20
20
  <script>
21
21
  'use strict';
22
22
  document.addEventListener('DOMContentLoaded', function (event) {
23
- function handleClick (event) {
23
+ function handleChange (event) {
24
24
  var input = event.target,
25
- checked = input.checked,
25
+ checked = input.checked;
26
- genre = input.form.elements['genre[]'];
27
26
 
28
- if (input.id !== 'allcheck') {
27
+ if (input.tagName !== 'INPUT') {
29
28
  return;
30
29
  }
31
30
 
31
+ if (input.id === 'allcheck') {
32
- for (var i = 0, l = genre.length; i < l; ++i) {
32
+ for (var i = 0, genre = input.form.elements['genre[]'], l = genre.length; i < l; ++i) {
33
- genre[i].checked = checked;
33
+ genre[i].checked = checked;
34
+ }
35
+ } else if (input.name === 'genre[]') {
36
+ input.form.elements['allcheck'].checked = checked;
34
37
  }
35
38
  }
36
39
 
@@ -48,7 +51,7 @@
48
51
  label.firstChild.data = '全てチェック/解除';
49
52
 
50
53
  ul.insertBefore(li, ul.firstElementChild);
51
- input.addEventListener('click', handleClick, false);
54
+ ul.addEventListener('change', handleChange, false);
52
55
  }
53
56
 
54
57
  main();