質問編集履歴

1

ご教示いただいた箇所を反映。より表題に近い内容に変更しました。

2021/02/10 09:55

投稿

nakamu-
nakamu-

スコア3

test CHANGED
File without changes
test CHANGED
@@ -4,29 +4,33 @@
4
4
 
5
5
  下記のような連想配列を使って分岐・連動するセレクトボックスを作りたいと思っております。
6
6
 
7
- 配列をわけて、「1が選択された時は2の配列をセレクトボックスにいれてね」ということは、出来ましたが、
8
-
9
- これを同配列内で行う方法を教えていただきたいです。
10
-
11
-
12
-
13
7
 
14
8
 
15
9
  ■一つ前の選んだ項目で絞ったセレクトボックスを追加したい
16
10
 
17
11
  例えば、りんごが選択された時に、次のセレクトボックスの中身は「りんご」の中のplace一覧が表示され、
18
12
 
19
- その次のセレクトボックスが「りんご」-「place(例えば青森県産)」に紐づくpriceを表示させるというものです。
13
+ その次のセレクトボックスが「りんご」-「place(例えば青森県産)」に紐づくset - toyを表示させるイメージです。
20
-
21
-
22
-
23
-
24
-
25
- ■セレクトボックス内で重複している項目は除外したい
14
+
26
-
15
+
16
+
27
- 使用したい配列すと中身をセレクトボックスに入れた場合「りんご りんご りんご りんご バナナ バナナ バナナ
17
+ 商品の情報は紐付けておきたいで、(例えば 「りんご - 青森産 - 2パックセット - おもちゃつき など)
18
+
28
-
19
+ セレクトボックスが5個くらいになった時に連想配列の階層がとんでもなく深くなってしまうのですが、
20
+
29
- うようになってしまうので「りんご バナナ」といようにしたい
21
+ 情報が多場合この配列の書き方・使い方であっているのでしょか??
22
+
23
+ 別なやりかたの方が実装・運用が簡単という方法があればご教示時ください。
24
+
25
+
26
+
27
+
28
+
29
+ 2つ目までは連動できるのですが、どうしても3つ目以上ができません。
30
+
31
+ 3つ目以降を上の階層に紐づくセレクトボックスの作り方をご教示いただければと思います。
32
+
33
+
30
34
 
31
35
 
32
36
 
@@ -38,9 +42,13 @@
38
42
 
39
43
  <select id="selName" onchange="selParts(this);"></select>
40
44
 
41
- <select id="selPlace"></select>
45
+ <select id="sel2"></select>
42
-
46
+
43
- <select id="selPrice"></select>
47
+ <select id="sel3"></select>
48
+
49
+ <select id="sel4"></select>
50
+
51
+ <select id="sel5"></select>
44
52
 
45
53
  ```
46
54
 
@@ -56,6 +64,72 @@
56
64
 
57
65
  name: "りんご",
58
66
 
67
+ place:[
68
+
69
+ {cd: "1",place: "青森県産",
70
+
71
+ set:[{cd:1,set:"2パックセット",
72
+
73
+ toy:[{cd:1,toy:"りんごのおもちゃ",},
74
+
75
+ {cd:1,toy:"梨のおもちゃ",},]
76
+
77
+ },
78
+
79
+ {cd:1,set:"3パックセット",
80
+
81
+ toy:[{cd:1,toy:"りんごのおもちゃ",},
82
+
83
+ {cd:1,toy:"梨のおもちゃ",},]
84
+
85
+ },
86
+
87
+ ]
88
+
89
+ },
90
+
91
+ {cd: "2",place: "長野県産",
92
+
93
+ set:[{cd:1,set:"特別セット",
94
+
95
+ toy:[{cd:1,toy:"りんごのおもちゃ",},
96
+
97
+ {cd:2,toy:"梨のおもちゃ",},]
98
+
99
+ },
100
+
101
+ {cd:2,set:"激安セット",
102
+
103
+ toy:[{cd:1,toy:"りんごのおもちゃ",},
104
+
105
+ {cd:2,toy:"梨のおもちゃ",},]
106
+
107
+ },
108
+
109
+ ]},
110
+
111
+ {cd: "3",place: "山形産",
112
+
113
+ set:[{cd:1,set:"2パック特別セット",
114
+
115
+ toy:[{cd:1,toy:"りんごのおもちゃ",},
116
+
117
+ {cd:2,toy:"梨のおもちゃ",},]
118
+
119
+ },
120
+
121
+ {cd:1,set:"3パック激安セット",
122
+
123
+ toy:[{cd:1,toy:"りんごのおもちゃ",},
124
+
125
+ {cd:2,toy:"梨のおもちゃ",},]
126
+
127
+ },
128
+
129
+ ]},
130
+
131
+ ],
132
+
59
133
  },
60
134
 
61
135
  {
@@ -64,198 +138,140 @@
64
138
 
65
139
  name: "バナナ",
66
140
 
141
+ place:[
142
+
143
+ {cd: "1",place: "国産",
144
+
145
+ set:[{cd:1,set:"2パックセット",
146
+
147
+ toy:[{cd:1,toy:"バナナのおもちゃ",},
148
+
149
+ {cd:1,toy:"おもちゃなし",},]
150
+
151
+ },
152
+
153
+ {cd:1,set:"3パックセット",
154
+
155
+ toy:[{cd:1,toy:"パイナップルのおもちゃ",},
156
+
157
+ {cd:1,toy:"ハンカチ",},]
158
+
159
+ },
160
+
161
+ ]
162
+
163
+ },
164
+
165
+ {cd: "2",place: "インドネシア産",
166
+
167
+ set:[{cd:1,set:"特別セット",
168
+
169
+ toy:[{cd:1,toy:"タオル",},
170
+
171
+ {cd:2,toy:"ペン",},]
172
+
173
+ },
174
+
175
+ {cd:2,set:"激安セット",
176
+
177
+ toy:[{cd:1,toy:"シール",},
178
+
179
+ {cd:2,toy:"なし",},]
180
+
181
+ },
182
+
183
+ ]},
184
+
185
+ {cd: "3",place: "フィリピン産",
186
+
187
+ set:[{cd:1,set:"2パック特別セット",
188
+
189
+ toy:[{cd:1,toy:"シール",},
190
+
191
+ {cd:2,toy:"フィリピンのおもちゃ",},]
192
+
193
+ },
194
+
195
+ {cd:1,set:"3パック激安セット",
196
+
197
+ toy:[{cd:1,toy:"タオル",},
198
+
199
+ {cd:2,toy:"シール",},]
200
+
201
+ },
202
+
203
+ ]},
204
+
205
+ ],
206
+
67
207
  },
68
208
 
69
209
  ]
70
210
 
71
-
211
+ ```
72
-
212
+
213
+
214
+
73
- let ApplePlace = [{
215
+ javascriptコード
74
-
216
+
75
- cd: "1",
217
+ ```javascript
218
+
76
-
219
+ for (var i = 0; i < data.length; i++) {
220
+
77
- place: "青森県産",
221
+ let op = document.createElement("option");
78
-
79
- },
222
+
80
-
81
- {
82
-
83
- cd: "2",
84
-
85
- place: "長野県産",
86
-
87
- },
88
-
89
- {
90
-
91
- cd: "3",
92
-
93
- place: "山形産",
223
+ op.value = data[i].cd;
224
+
94
-
225
+ op.appendChild(document.createTextNode(data[i].name));
226
+
227
+ document.getElementById("selName").appendChild(op);
228
+
95
- }
229
+ }
96
-
97
- ]
98
230
 
99
231
 
100
232
 
233
+
234
+
235
+
236
+
101
- let BananaPlace = [{
237
+ function selParts(obj) {
102
-
238
+
103
- cd: "1",
239
+ var targetArr;
104
-
240
+
105
- place: "国産",
241
+ if (obj.value == "1") {
106
-
107
- },
242
+
108
-
109
- {
110
-
111
- cd: "2",
112
-
113
- place: "インドネシア産",
243
+ targetArr = data[0].place;
114
-
115
- },
244
+
116
-
117
- {
118
-
119
- cd: "3",
120
-
121
- place: "フィリピン産",
245
+ } else if (obj.value == "2") {
246
+
122
-
247
+ targetArr = data[1].place;;
248
+
249
+ } else {
250
+
251
+ targetArr = new Array();
252
+
123
- }
253
+ }
254
+
124
-
255
+ var selObj = document.getElementById('sel2');
256
+
257
+ while (selObj.lastChild) {
258
+
259
+ selObj.removeChild(selObj.lastChild);
260
+
125
- ]
261
+ }
262
+
263
+ for (var i = 0; i < targetArr.length; i++) {
264
+
265
+ let op = document.createElement("option");
266
+
267
+ op.value = targetArr[i].place;
268
+
269
+ op.text = targetArr[i].place;
270
+
271
+ selObj.appendChild(op);
272
+
273
+ }
274
+
275
+ }
126
276
 
127
277
  ```
128
-
129
-
130
-
131
- javascriptコード
132
-
133
- ```javascript
134
-
135
- for (var i = 0; i < data.length; i++) {
136
-
137
- let op = document.createElement("option");
138
-
139
- op.value = data[i].name;
140
-
141
- op.appendChild(document.createTextNode(data[i].name));
142
-
143
- document.getElementById("selName").appendChild(op);
144
-
145
- }
146
-
147
-
148
-
149
- function selParts(obj) {
150
-
151
- var targetArr;
152
-
153
- if (obj.value == "りんご") {
154
-
155
- targetArr = ApplePlace;
156
-
157
- } else if (obj.value == "バナナ") {
158
-
159
- targetArr = BananaPlace;
160
-
161
- } else {
162
-
163
- targetArr = new Array();
164
-
165
- }
166
-
167
- var selObj = document.getElementById('selPlace');
168
-
169
- while (selObj.lastChild) {
170
-
171
- selObj.removeChild(selObj.lastChild);
172
-
173
- }
174
-
175
- for (var i = 0; i < targetArr.length; i++) {
176
-
177
- let op = document.createElement("option");
178
-
179
- op.value = targetArr[i].cd;
180
-
181
- op.text = targetArr[i].place;
182
-
183
- selObj.appendChild(op);
184
-
185
- }
186
-
187
- }
188
-
189
- ```
190
-
191
-
192
-
193
-
194
-
195
- 下記の配列を使いたい
196
-
197
- ```javascript
198
-
199
- let data = [{
200
-
201
- name: "りんご",
202
-
203
- place: "青森県産",
204
-
205
- price: 100
206
-
207
- },
208
-
209
- {
210
-
211
- name: "りんご",
212
-
213
- place: "青森県産",
214
-
215
- price: 200
216
-
217
- },
218
-
219
- {
220
-
221
- name: "りんご",
222
-
223
- place: "長野県産",
224
-
225
- price: 100
226
-
227
- },
228
-
229
- {
230
-
231
- name: "バナナ",
232
-
233
- place: "国産",
234
-
235
- price: 100
236
-
237
- },
238
-
239
- {
240
-
241
- name: "バナナ",
242
-
243
- place: "国産",
244
-
245
- price: 200
246
-
247
- },
248
-
249
- {
250
-
251
- name: "バナナ",
252
-
253
- place: "外国産",
254
-
255
- price: 100
256
-
257
- }
258
-
259
- ]
260
-
261
- ```