回答編集履歴

5

テキスト修正

2020/06/19 15:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -98,4 +98,4 @@
98
98
 
99
99
  ```
100
100
 
101
- - 動作確認用CodePen: [https://codepen.io/jun68ykt/pen/VwePxRK?editors=1010](https://codepen.io/jun68ykt/pen/VwePxRK?editors=1010)
101
+ - 動作確認用CodePen: [https://codepen.io/jun68ykt/pen/pogRKRm?editors=1010](https://codepen.io/jun68ykt/pen/pogRKRm?editors=1010)

4

テキスト修正

2020/06/19 15:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  ```
54
54
 
55
- は、配列に似た [RadioNodeList](https://developer.mozilla.org/ja/docs/Web/API/RadioNodeList)オブジェクトであるので、ご質問のコードにあるような`for`ループで各要素を取得できますが、`name="test"` のチェックボックスが1個のときは、要素が1個の`RadioNodeList`**ではなく**、そのチェックボックス要素自体であるために、後のforループが意図した動作にならないからです。ですので、1個の場合も複数の場合も、ご質問にあるfor文で意図通りの動作をさせるためには、上記のDiffで示したとおり、該当要素が1個の場合も、配列に似たオブジェクトを返してくれる、[querySelectorAll](https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll) に修正すれば問題は解決すると思います。
55
+ は、配列に似た [RadioNodeList](https://developer.mozilla.org/ja/docs/Web/API/RadioNodeList)オブジェクトであるので、ご質問のコードにあるような`for`ループで各要素を取得できますが、`name="test"` のチェックボックスが1個のときは、要素が1個の`RadioNodeList`**ではなく**、そのチェックボックス要素自体であるために、後のforループが意図した動作にならないからです。ですので、1個の場合も複数の場合も、ご質問にあるfor文で意図通りの動作をさせるためには、上記のDiffで示したとおり、該当要素が1個の場合も、配列に似たオブジェクトを返してくれる、[querySelectorAll](https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll) を使うように修正すれば問題は解決すると思います。
56
56
 
57
57
 
58
58
 

3

テキスト修正

2020/06/19 15:45

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  ```
54
54
 
55
- は、配列に似た [RadioNodeList](https://developer.mozilla.org/ja/docs/Web/API/RadioNodeList)オブジェクトを返すので、ご質問のコードにあるような`for`ループで各要素を取得できますが、`name="test"` のチェックボックスが1個のときは、要素が1個の`RadioNodeList`**ではなく**、そのチェックボックス要素自体を返すために、後のforループが意図した動作にならないからです。ですので、1個の場合も複数の場合も、ご質問にあるfor文で意図通りの動作をさせるためには、上記のDiffで示したとおり、該当要素が1個の場合も、配列に似たオブジェクトを返してくれる、[querySelectorAll](https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll) に修正すれば問題は解決すると思います。
55
+ は、配列に似た [RadioNodeList](https://developer.mozilla.org/ja/docs/Web/API/RadioNodeList)オブジェクトであるので、ご質問のコードにあるような`for`ループで各要素を取得できますが、`name="test"` のチェックボックスが1個のときは、要素が1個の`RadioNodeList`**ではなく**、そのチェックボックス要素自体であるために、後のforループが意図した動作にならないからです。ですので、1個の場合も複数の場合も、ご質問にあるfor文で意図通りの動作をさせるためには、上記のDiffで示したとおり、該当要素が1個の場合も、配列に似たオブジェクトを返してくれる、[querySelectorAll](https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll) に修正すれば問題は解決すると思います。
56
56
 
57
57
 
58
58
 

2

テキスト修正

2020/06/19 15:42

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -32,13 +32,15 @@
32
32
 
33
33
  ```diff
34
34
 
35
- function DisChecked(){
35
+ function DisChecked(){
36
36
 
37
37
  - var checks = document.form.test;
38
38
 
39
39
  + var checks = document.querySelectorAll("input[name=test]");
40
40
 
41
41
  ```
42
+
43
+ (※ご質問にあるコードでは、`DisChecked`の直前が全角スペースになっているようです。)
42
44
 
43
45
 
44
46
 
@@ -95,3 +97,5 @@
95
97
  }
96
98
 
97
99
  ```
100
+
101
+ - 動作確認用CodePen: [https://codepen.io/jun68ykt/pen/VwePxRK?editors=1010](https://codepen.io/jun68ykt/pen/VwePxRK?editors=1010)

1

テキスト修正

2020/06/19 15:30

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -55,3 +55,43 @@
55
55
 
56
56
 
57
57
  以上、参考になれば幸いです。
58
+
59
+
60
+
61
+
62
+
63
+ ### 追記
64
+
65
+
66
+
67
+ リファクタリング案を挙げておきます。
68
+
69
+
70
+
71
+ ```javascript
72
+
73
+ var testChecks = [...document.querySelectorAll("input[name=test]")];
74
+
75
+
76
+
77
+ function AllChecked() {
78
+
79
+ var { checked } = document.form.all;
80
+
81
+ testChecks.forEach(test => {
82
+
83
+ test.checked = checked;
84
+
85
+ });
86
+
87
+ }
88
+
89
+
90
+
91
+ function DisChecked() {
92
+
93
+ document.form.all.checked = testChecks.every(test => test.checked);
94
+
95
+ }
96
+
97
+ ```