回答編集履歴
2
個別チェック時の処理の解釈が誤っていたのを修正
    
        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/ 
     | 
| 
      
 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イベントに変更。個別チェック時に一括チェックと連動するように修正。
    
        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/ 
     | 
| 
      
 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  
     | 
| 
      
 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. 
     | 
| 
      
 27 
     | 
    
         
            +
                if (input.tagName !== 'INPUT') {
         
     | 
| 
       29 
28 
     | 
    
         
             
                  return;
         
     | 
| 
       30 
29 
     | 
    
         
             
                }
         
     | 
| 
       31 
30 
     | 
    
         | 
| 
      
 31 
     | 
    
         
            +
                if (input.id === 'allcheck') {
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
                  for (var i = 0, genre = input.form.elements['genre[]'], l = genre.length; i < l; ++i) {
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
      
 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 
     | 
    
         
            -
                 
     | 
| 
      
 54 
     | 
    
         
            +
                ul.addEventListener('change', handleChange, false);
         
     | 
| 
       52 
55 
     | 
    
         
             
              }
         
     | 
| 
       53 
56 
     | 
    
         | 
| 
       54 
57 
     | 
    
         
             
              main();
         
     |