I'm trying to loop through a JSON file and append the info to the relevant containers. There's two levels to this, the first level and the second level. The first level has handle types (Victorian, Chrissi, Garda) and the second level has the finish (Brass, Chrome, Satin Nickel). My issue is, when you get to the second level, I'm having difficulty grouping options to the relevant handle type. I hope this makes sense.
So if you click on "Victorian", then it should load the next menu with only "Victorian" finish options. I'm using the data-trigger/data-target attribute to link menus together.
Here's how it should work:
Screenshot for Menu 1 Screenshot for Menu 2
Click the door handle icon, it loads the first menu which gives the following options:-
Title = Choose a family
Options = Victorian - Chrissi - Garda.
You then click "Victorian", and it gives you the victorian finish options, so the next menu should be:-
Title = Choose a finish
Options = Brass, Chrome, Satin Nickel (based on the type you selected)
The same would go for the other options.
Here's the JSON file:
{
"Families": {
"title": "Choose a family",
"options": [
{
"name": "Victorian",
"thumbnail": "/modules/DoorSelector/images/victorian_thumb.jpg",
"options": {
"title": "Choose a finish",
"options": [
{
"name": "Brass",
"thumbnail": "/modules/DoorSelector/images/victorian_brass.jpg",
"material": "brass",
"sku": "DFU0611"
},
{
"name": "Chrome",
"thumbnail": "/modules/DoorSelector/images/victorian_chrome.jpg",
"material": "chrome",
"sku": "DFU0611"
},
{
"name": "Satin Nickel",
"thumbnail": "/modules/DoorSelector/images/victorian_satin_nickel.jpg",
"material": "satin_nickel",
"sku": "DFU0611"
}
]
}
},
{
"name": "Chrissi",
"thumbnail": "/modules/DoorSelector/images/chrissi_thumb.jpg",
"options": {
"options": [
{
"name": "Brass",
"thumbnail": "/modules/DoorSelector/images/chrissi_brass.jpg",
"material": "brass",
"sku": "Chrissi"
},
{
"name": "Chrome",
"thumbnail": "/modules/DoorSelector/images/chrissi_chrome.jpg",
"material": "chrome",
"sku": "Chrissi"
},
{
"name": "Satin Nickel",
"thumbnail": "/modules/DoorSelector/images/chrissi_satin_nickel.jpg",
"material": "satin_nickel",
"sku": "Chrissi"
}
]
}
},
{
"name": "Garda",
"thumbnail": "/modules/DoorSelector/images/garda_thumb.jpg",
"options": {
"options": [
{
"name": "Brass",
"thumbnail": "/modules/DoorSelector/images/garda_brass.jpg",
"material": "brass",
"sku": "DFU0820"
},
{
"name": "Chrome",
"thumbnail": "/modules/DoorSelector/images/garda_chrome.jpg",
"material": "chrome",
"sku": "DFU0820"
},
{
"name": "Satin Nickel",
"thumbnail": "/modules/DoorSelector/images/garda_satin_nickel.jpg",
"material": "satin_nickel",
"sku": "DFU0820"
}
]
}
}
]
}
}
This is as far I've come. As you can see, when it comes to the second level options/finish, it's just displaying all of them.
My current HTML:
<div data-target="handles" class="handlesOuterContainer show">
<div class="levelOneHandles">
<p class="menuTitle">Choose a family</p>
<div class="menuOption"><img class="familyThumbnail back" src="/modules/DoorSelector/images/arrow_back.jpg">
</div>
<div data-trigger="handles_victorian" class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_thumb.jpg">
<p class="familyTitle">Victorian</p>
</div>
<div data-trigger="handles_chrissi" class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_thumb.jpg">
<p class="familyTitle">Chrissi</p>
</div>
<div data-trigger="handles_garda" class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_thumb.jpg">
<p class="familyTitle">Garda</p>
</div>
</div>
<div data-target="handles_victorian" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_brass.jpg">
<p class="familyTitle">Victorian</p>
</div>
</div>
<div data-target="handles_victorian" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_chrome.jpg">
<p class="familyTitle">Victorian</p>
</div>
</div>
<div data-target="handles_victorian" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_satin_nickel.jpg">
<p class="familyTitle">Victorian</p>
</div>
</div>
<div data-target="handles_chrissi" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_brass.jpg">
<p class="familyTitle">Chrissi</p>
</div>
</div>
<div data-target="handles_chrissi" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_chrome.jpg">
<p class="familyTitle">Chrissi</p>
</div>
</div>
<div data-target="handles_chrissi" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_satin_nickel.jpg">
<p class="familyTitle">Chrissi</p>
</div>
</div>
<div data-target="handles_garda" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_brass.jpg">
<p class="familyTitle">Garda</p>
</div>
</div>
<div data-target="handles_garda" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_chrome.jpg">
<p class="familyTitle">Garda</p>
</div>
</div>
<div data-target="handles_garda" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_satin_nickel.jpg">
<p class="familyTitle">Garda</p>
</div>
</div>
</div>
How the HTML should look:
<div data-target="handles" class="handlesOuterContainer show">
<div class="levelOneHandles">
<p class="menuTitle">Choose a family</p>
<div class="menuOption"><img class="familyThumbnail back" src="/modules/DoorSelector/images/arrow_back.jpg">
</div>
<div data-trigger="handles_victorian" class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_thumb.jpg">
<p class="familyTitle">Victorian</p>
</div>
<div data-trigger="handles_chrissi" class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_thumb.jpg">
<p class="familyTitle">Chrissi</p>
</div>
<div data-trigger="handles_garda" class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_thumb.jpg">
<p class="familyTitle">Garda</p>
</div>
</div>
<div data-target="handles_victorian" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_brass.jpg">
<p class="familyTitle">Brass</p>
</div>
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_chrome.jpg">
<p class="familyTitle">Chrome</p>
</div>
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/victorian_satin_nickel.jpg">
<p class="familyTitle">Satin Nickel</p>
</div>
</div>
<div data-target="handles_chrissi" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_brass.jpg">
<p class="familyTitle">Brass</p>
</div>
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_chrome.jpg">
<p class="familyTitle">Chrome</p>
</div>
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/chrissi_satin_nickel.jpg">
<p class="familyTitle">Satin Nickel</p>
</div>
</div>
<div data-target="handles_garda" class="levelTwoHandles">
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_brass.jpg">
<p class="familyTitle">Brass</p>
</div>
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_chrome.jpg">
<p class="familyTitle">Chrome</p>
</div>
<div class="menuOption"><img class="familyThumbnail" src="/modules/DoorSelector/images/garda_satin_nickel.jpg">
<p class="familyTitle">Satin Nickel</p>
</div>
</div>
</div>
JQuery:
$.getJSON("/modules/DoorSelector/handles.json", function(data){
var levelOneHandlesContainer = '.levelOneHandles';
// main container title
$(levelOneHandlesContainer).append('<p class="menuTitle">'+data.Families.title+'</p>');
// back button
$(levelOneHandlesContainer).append('<div class="menuOption"><img src="/modules/DoorSelector/images/arrow_back.jpg" class="familyThumbnail back"></div>');
// loop through objects
$.each(data.Families.options, function(index, value) {
// write options to container
$(levelOneHandlesContainer).append('<div class="menuOption" data-trigger="handles_'+value.name.toLowerCase()+'"><img src='+value.thumbnail+' class="familyThumbnail" /><p class="familyTitle">'+value.name+'</p></div>');
// second level
$.each(this, function(index, value2) {
$.each(this.options, function(index, value3) {
$('.handlesOuterContainer').append('<div class="levelTwoHandles" data-target="handles_'+value.name.toLowerCase()+'"><div class="menuOption"><img src='+value3.thumbnail+' class="familyThumbnail" /><p class="familyTitle">'+value.name+'</p></div></div>');
});
});
});
});