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
var data =
[
{ "id":"Pantone 12345",
"name":"Pantone 12345",
"stocks":
[
{"name": "SG123345", "catagory":"Semigloss","pantoneMatch": true},
{"name": "SP9383834", "catagory":"SilverMax","pantoneMatch": false},
]
},
{ "id":"Pantone 9786754",
"name":"Pantone 9786754",
"stocks":
[
{"name": "SG123345", "catagory":"Semigloss","pantoneMatch": true},
{"name": "SP9383834", "catagory":"SilverMax","pantoneMatch": false},
]
}
]
here is the code im using to create the dropdown
var dataStock = (data.stocks.name)
console.log(dataStock)
$.each(data, function(i, option){
console.log(option)
$('#pantoneSelect').append($('<option>').attr("value", option.id).text(option.name));
})
the var dataStock error out because i can’t get to the stocks name.
Advertisement
Answer
this way ?
const data =
[ { id : 'Pantone 12345'
, name : 'Pantone 12345'
, stocks:
[ { name: 'SG123345', catagory: 'Semigloss', pantoneMatch: true }
, { name: 'SP9383834', catagory: 'SilverMax', pantoneMatch: false }
]
}
, { id : 'Pantone 9786754'
, name : 'Pantone 9786754'
, stocks:
[ { name: 'SG123345', catagory: 'Semigloss', pantoneMatch: true }
, { name: 'SP9383834', catagory: 'SilverMax', pantoneMatch: false }
] } ]
const myForm = document.forms['my-form']
for (let pantone of data)
for (let stock of (pantone?.stocks || []))
{
myForm.pantoneSelect.add( new Option( stock.name, `${pantone.id}|${stock.name}`))
}
myForm.onsubmit = e =>
{
e.preventDefault()
if (myForm.pantoneSelect.value != '')
{
let [id,stockName] = myForm.pantoneSelect.value.split('|')
, dataRow = data.find(x=>x.id === id)
, stockRow = dataRow.stocks.find(x=>x.name===stockName)
;
console.clear()
console.log( `data-id=${dataRow.id}, data-Name=${dataRow.name}` )
console.log( `stock=${JSON.stringify(stockRow)}` )
}
}.as-console-row::after { display:none !important; }<form action="" name="my-form">
<select name="pantoneSelect">
<option selected disabled value="">pick one pantone</option>
</select>
<button type="submit">submit</button>
</form>