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

回答編集履歴

5

テキスト修正

2020/06/19 15:54

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -48,4 +48,4 @@
48
48
  document.form.all.checked = testChecks.every(test => test.checked);
49
49
  }
50
50
  ```
51
- - 動作確認用CodePen: [https://codepen.io/jun68ykt/pen/VwePxRK?editors=1010](https://codepen.io/jun68ykt/pen/VwePxRK?editors=1010)
51
+ - 動作確認用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

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  ```javascript
26
26
  document.form.test
27
27
  ```
28
- は、配列に似た [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) に修正すれば問題は解決すると思います。
28
+ は、配列に似た [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) を使うように修正すれば問題は解決すると思います。
29
29
 
30
30
  以上、参考になれば幸いです。
31
31
 

3

テキスト修正

2020/06/19 15:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  ```javascript
26
26
  document.form.test
27
27
  ```
28
- は、配列に似た [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) に修正すれば問題は解決すると思います。
28
+ は、配列に似た [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) に修正すれば問題は解決すると思います。
29
29
 
30
30
  以上、参考になれば幸いです。
31
31
 

2

テキスト修正

2020/06/19 15:42

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -15,10 +15,11 @@
15
15
  ```
16
16
 
17
17
  ```diff
18
- function DisChecked(){
18
+ function DisChecked(){
19
19
  - var checks = document.form.test;
20
20
  + var checks = document.querySelectorAll("input[name=test]");
21
21
  ```
22
+ (※ご質問にあるコードでは、`DisChecked`の直前が全角スペースになっているようです。)
22
23
 
23
24
  上記のように修正する理由としては、`name="test"` のチェックボックスが複数あるとき、
24
25
  ```javascript
@@ -46,4 +47,5 @@
46
47
  function DisChecked() {
47
48
  document.form.all.checked = testChecks.every(test => test.checked);
48
49
  }
49
- ```
50
+ ```
51
+ - 動作確認用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

answer CHANGED
@@ -26,4 +26,24 @@
26
26
  ```
27
27
  は、配列に似た [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) に修正すれば問題は解決すると思います。
28
28
 
29
- 以上、参考になれば幸いです。
29
+ 以上、参考になれば幸いです。
30
+
31
+
32
+ ### 追記
33
+
34
+ リファクタリング案を挙げておきます。
35
+
36
+ ```javascript
37
+ var testChecks = [...document.querySelectorAll("input[name=test]")];
38
+
39
+ function AllChecked() {
40
+ var { checked } = document.form.all;
41
+ testChecks.forEach(test => {
42
+ test.checked = checked;
43
+ });
44
+ }
45
+
46
+ function DisChecked() {
47
+ document.form.all.checked = testChecks.every(test => test.checked);
48
+ }
49
+ ```