im more of a designer and less of a programmer so any help is greatly appreciated. The idea behind this project is to generate a dropdown menu using the “name” from the data json and when selected the “stock” information will appear as well. I’ve been able to get to the “name”:”Pantone 12345″ but when i try to access the name of the stocks i get and error saying it can’t find property “name”
here is my json
JavaScript
x
26
26
1
var data =
2
3
[
4
{ "id":"Pantone 12345",
5
"name":"Pantone 12345",
6
"stocks":
7
8
[
9
{"name": "SG123345", "catagory":"Semigloss","pantoneMatch": true},
10
{"name": "SP9383834", "catagory":"SilverMax","pantoneMatch": false},
11
]
12
13
},
14
{ "id":"Pantone 9786754",
15
"name":"Pantone 9786754",
16
"stocks":
17
[
18
{"name": "SG123345", "catagory":"Semigloss","pantoneMatch": true},
19
{"name": "SP9383834", "catagory":"SilverMax","pantoneMatch": false},
20
]
21
22
}
23
24
25
]
26
here is the code im using to create the dropdown
JavaScript
1
7
1
var dataStock = (data.stocks.name)
2
console.log(dataStock)
3
$.each(data, function(i, option){
4
console.log(option)
5
$('#pantoneSelect').append($('<option>').attr("value", option.id).text(option.name));
6
})
7
the var dataStock error out because i can’t get to the stocks name.
Advertisement
Answer
this way ?
JavaScript
1
38
38
1
const data =
2
[ { id : 'Pantone 12345'
3
, name : 'Pantone 12345'
4
, stocks:
5
[ { name: 'SG123345', catagory: 'Semigloss', pantoneMatch: true }
6
, { name: 'SP9383834', catagory: 'SilverMax', pantoneMatch: false }
7
]
8
}
9
, { id : 'Pantone 9786754'
10
, name : 'Pantone 9786754'
11
, stocks:
12
[ { name: 'SG123345', catagory: 'Semigloss', pantoneMatch: true }
13
, { name: 'SP9383834', catagory: 'SilverMax', pantoneMatch: false }
14
] } ]
15
16
const myForm = document.forms['my-form']
17
18
for (let pantone of data)
19
for (let stock of (pantone?.stocks || []))
20
{
21
myForm.pantoneSelect.add( new Option( stock.name, `${pantone.id}|${stock.name}`))
22
}
23
24
myForm.onsubmit = e =>
25
{
26
e.preventDefault()
27
28
if (myForm.pantoneSelect.value != '')
29
{
30
let [id,stockName] = myForm.pantoneSelect.value.split('|')
31
, dataRow = data.find(x=>x.id === id)
32
, stockRow = dataRow.stocks.find(x=>x.name===stockName)
33
;
34
console.clear()
35
console.log( `data-id=${dataRow.id}, data-Name=${dataRow.name}` )
36
console.log( `stock=${JSON.stringify(stockRow)}` )
37
}
38
}
JavaScript
1
1
1
.as-console-row::after { display:none !important; }
JavaScript
1
7
1
<form action="" name="my-form">
2
3
<select name="pantoneSelect">
4
<option selected disabled value="">pick one pantone</option>
5
</select>
6
<button type="submit">submit</button>
7
</form>