前提・実現したいこと
下記のような連想配列を使って分岐・連動するセレクトボックスを作りたいと思っております。
■一つ前の選んだ項目で絞ったセレクトボックスを追加したい
例えば、りんごが選択された時に、次のセレクトボックスの中身は「りんご」の中のplace一覧が表示され、
その次のセレクトボックスが「りんご」-「place(例えば青森県産)」に紐づくset - toyを表示させるイメージです。
商品の情報は紐付けしておきたいので、(例えば 「りんご - 青森産 - 2パックセット - おもちゃつき」 など)
セレクトボックスが5個くらいになった時に連想配列の階層がとんでもなく深くなってしまうのですが、
情報が多い場合この配列の書き方・使い方であっているのでしょうか??
別なやりかたの方が実装・運用が簡単という方法があればご教示時ください。
2つ目までは連動できるのですが、どうしても3つ目以上ができません。
3つ目以降を上の階層に紐づくセレクトボックスの作り方をご教示いただければと思います。
html
1<select id="selName" onchange="selParts(this);"></select> 2<select id="sel2"></select> 3<select id="sel3"></select> 4<select id="sel4"></select> 5<select id="sel5"></select>
現状の配列
javascript
1let data = [{ 2 cd: "1", 3 name: "りんご", 4 place:[ 5 {cd: "1",place: "青森県産", 6 set:[{cd:1,set:"2パックセット", 7 toy:[{cd:1,toy:"りんごのおもちゃ",}, 8 {cd:1,toy:"梨のおもちゃ",},] 9 }, 10 {cd:1,set:"3パックセット", 11 toy:[{cd:1,toy:"りんごのおもちゃ",}, 12 {cd:1,toy:"梨のおもちゃ",},] 13 }, 14 ] 15 }, 16 {cd: "2",place: "長野県産", 17 set:[{cd:1,set:"特別セット", 18 toy:[{cd:1,toy:"りんごのおもちゃ",}, 19 {cd:2,toy:"梨のおもちゃ",},] 20 }, 21 {cd:2,set:"激安セット", 22 toy:[{cd:1,toy:"りんごのおもちゃ",}, 23 {cd:2,toy:"梨のおもちゃ",},] 24 }, 25 ]}, 26 {cd: "3",place: "山形産", 27 set:[{cd:1,set:"2パック特別セット", 28 toy:[{cd:1,toy:"りんごのおもちゃ",}, 29 {cd:2,toy:"梨のおもちゃ",},] 30 }, 31 {cd:1,set:"3パック激安セット", 32 toy:[{cd:1,toy:"りんごのおもちゃ",}, 33 {cd:2,toy:"梨のおもちゃ",},] 34 }, 35 ]}, 36 ], 37 }, 38 { 39 cd: "2", 40 name: "バナナ", 41 place:[ 42 {cd: "1",place: "国産", 43 set:[{cd:1,set:"2パックセット", 44 toy:[{cd:1,toy:"バナナのおもちゃ",}, 45 {cd:1,toy:"おもちゃなし",},] 46 }, 47 {cd:1,set:"3パックセット", 48 toy:[{cd:1,toy:"パイナップルのおもちゃ",}, 49 {cd:1,toy:"ハンカチ",},] 50 }, 51 ] 52 }, 53 {cd: "2",place: "インドネシア産", 54 set:[{cd:1,set:"特別セット", 55 toy:[{cd:1,toy:"タオル",}, 56 {cd:2,toy:"ペン",},] 57 }, 58 {cd:2,set:"激安セット", 59 toy:[{cd:1,toy:"シール",}, 60 {cd:2,toy:"なし",},] 61 }, 62 ]}, 63 {cd: "3",place: "フィリピン産", 64 set:[{cd:1,set:"2パック特別セット", 65 toy:[{cd:1,toy:"シール",}, 66 {cd:2,toy:"フィリピンのおもちゃ",},] 67 }, 68 {cd:1,set:"3パック激安セット", 69 toy:[{cd:1,toy:"タオル",}, 70 {cd:2,toy:"シール",},] 71 }, 72 ]}, 73 ], 74 }, 75 ]
javascriptコード
javascript
1for (var i = 0; i < data.length; i++) { 2 let op = document.createElement("option"); 3 op.value = data[i].cd; 4 op.appendChild(document.createTextNode(data[i].name)); 5 document.getElementById("selName").appendChild(op); 6} 7 8 9 10function selParts(obj) { 11 var targetArr; 12 if (obj.value == "1") { 13 targetArr = data[0].place; 14 } else if (obj.value == "2") { 15 targetArr = data[1].place;; 16 } else { 17 targetArr = new Array(); 18 } 19 var selObj = document.getElementById('sel2'); 20 while (selObj.lastChild) { 21 selObj.removeChild(selObj.lastChild); 22 } 23 for (var i = 0; i < targetArr.length; i++) { 24 let op = document.createElement("option"); 25 op.value = targetArr[i].place; 26 op.text = targetArr[i].place; 27 selObj.appendChild(op); 28 } 29}
回答1件
あなたの回答
tips
プレビュー