回答編集履歴

4

記法の統一

2021/07/10 14:04

投稿

k_a
k_a

スコア983

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  ## 追加の質問に対する回答
30
30
 
31
- ### 1. optionにdisabledを指定する処理は記述してありますが、disabledを取り除く処理が無い
31
+ ### 1. optionにdisabledを指定する処理は記述してあが、disabledを取り除く処理が無い
32
32
 
33
33
 
34
34
 
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- ### 2. Cの制限のfor文の範囲が間違っています。
41
+ ### 2. Cの制限のfor文の範囲が間違ってい
42
42
 
43
43
 
44
44
 

3

追加質問に対する回答

2021/07/10 14:04

投稿

k_a
k_a

スコア983

test CHANGED
@@ -19,3 +19,137 @@
19
19
 
20
20
 
21
21
  selItem[k].value="1"は"1"が代入され常にtruthyなので、必ずそのifブロックが実行されてしまいます。
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+ ## 追加の質問に対する回答
30
+
31
+ ### 1. optionにdisabledを指定する処理は記述してありますが、disabledを取り除く処理が無い
32
+
33
+
34
+
35
+ Aで1を選択したときには、Bの3と4がdisabledになります。
36
+
37
+ その後、Aで2を選択したときにはBの4をdisabledにしていますが、3のdisabledは解除されていないので結果的に1と同じ状況になっています。
38
+
39
+
40
+
41
+ ### 2. Cの制限のfor文の範囲が間違っています。
42
+
43
+
44
+
45
+ 「Aのvalueが2の場合Cは4から11番目のみ選択可能」のはずが、「1~11を選択不可」にしています。
46
+
47
+
48
+
49
+ ```javascript
50
+
51
+ const selItem = document.querySelectorAll("select");
52
+
53
+
54
+
55
+ for (let i = 1; i < 6; i += 3) {
56
+
57
+ selItem[i].setAttribute("disabled", true);
58
+
59
+ }
60
+
61
+ for (let j = 2; j < 6; j += 3) {
62
+
63
+ selItem[j].setAttribute("disabled", true);
64
+
65
+ }
66
+
67
+
68
+
69
+ for (let k = 0; k < 6; k += 3) {
70
+
71
+ selItem[k].addEventListener("click", function(evt) {
72
+
73
+ //同じグループのAが選択されたらB,Cのdisabledを外す
74
+
75
+ selItem[k + 1].disabled = false;
76
+
77
+ selItem[k + 2].disabled = false;
78
+
79
+ //Aが変更された場合はB,Cの選択可能オプションが変わるのでB,Cは選択を初期化する
80
+
81
+ selItem[k + 1].selectedIndex = 0;
82
+
83
+ selItem[k + 2].selectedIndex = 0;
84
+
85
+
86
+
87
+ /***** 追加:disabledの初期化 *****/
88
+
89
+ const selB = selItem[k + 1];
90
+
91
+ const selC = selItem[k + 2];
92
+
93
+ for (let item of selB.options) item.removeAttribute("disabled");
94
+
95
+ for (let item of selC.options) item.removeAttribute("disabled");
96
+
97
+ /***** 追加ココまで *****/
98
+
99
+
100
+
101
+ //Aのoption1つ目
102
+
103
+ if (selItem[k].value == "1") {
104
+
105
+ //Bの制限。Aのvalueが1の場合Bは1,2番目のみ選択可能
106
+
107
+ selItem[k + 1].options[3].setAttribute("disabled", true);
108
+
109
+ selItem[k + 1].options[4].setAttribute("disabled", true);
110
+
111
+ //Cの制限。Aのvalueが1の場合Cは1から6番目のみ選択可能
112
+
113
+ for (let c = 7; c < 12; c++) {
114
+
115
+ selItem[k + 2].options[c].setAttribute("disabled", true);
116
+
117
+ }
118
+
119
+ }
120
+
121
+
122
+
123
+ //Aのoption2つ目
124
+
125
+ else if (selItem[k].value == "2") {
126
+
127
+
128
+
129
+ //Bの制限。Aのvalueが2の場合Bは1,2,3番目のみ選択可能
130
+
131
+ selItem[k + 1].options[4].setAttribute("disabled", true);
132
+
133
+ //Cの制限。Aのvalueが2の場合Cは4から11番目のみ選択可能
134
+
135
+
136
+
137
+ /***** 修正:範囲 *****/
138
+
139
+ for (let c = 1; c < 5; c++) {
140
+
141
+ selItem[k + 2].options[c].setAttribute("disabled", true);
142
+
143
+ }
144
+
145
+ evt.stopPropagation(); // イベントの伝播を止める
146
+
147
+ }
148
+
149
+ });
150
+
151
+ }
152
+
153
+
154
+
155
+ ```

2

文法の修正

2021/07/10 14:02

投稿

k_a
k_a

スコア983

test CHANGED
@@ -6,13 +6,13 @@
6
6
 
7
7
  // 誤
8
8
 
9
- // selItem[k].value="1"
9
+ // if(selItem[k].value="1")
10
10
 
11
11
 
12
12
 
13
13
  //正
14
14
 
15
- selItem[k].value=="1"
15
+ if(selItem[k].value=="1")
16
16
 
17
17
  ```
18
18
 

1

文法の修正

2021/07/10 12:02

投稿

k_a
k_a

スコア983

test CHANGED
@@ -1,11 +1,21 @@
1
- おそらく以下のようになっているのが原因です。
1
+ おそらく以下の部分が原因です。
2
2
 
3
3
 
4
4
 
5
- 誤 : selItem[k].value="1"
5
+ ```javascript
6
6
 
7
+ // 誤
8
+
7
- 正 : selItem[k].value=="1"
9
+ // selItem[k].value="1"
8
10
 
9
11
 
10
12
 
13
+ //正
14
+
15
+ selItem[k].value=="1"
16
+
17
+ ```
18
+
19
+
20
+
11
- selItem[k].value="1"は"1"が代入され常にtruthyなので、必ずそのifブロックが実行されてしまっています。
21
+ selItem[k].value="1"は"1"が代入され常にtruthyなので、必ずそのifブロックが実行されてしまいます。