Radio button calculator with nested if Stateme - javascript
I am trying to create a pricing calculator that takes all of the checked radio buttons and pushes them into an array where it is added in the end. However, I would like to have one of the radio buttons take the attribute of the first radio button and multiply it by its own value.
I tried nesting an if statement inside of another if statement but it will only seem to add the values of the first if statement and ignore the second.
$(".w-radio").change(function() {
var totalPrice = 0,
values = [];
$("input[type=radio]").each(function() {
if ($(this).is(":checked")) {
if ($(this).is('[name="catering"]')) {
var cateringFunc = (
$(this).val() * $('[name="gastronomy"]').attr("add-value")
).toString();
values.push($(this).val());
}
values.push($(this).val());
totalPrice += parseInt($(this).val());
}
});
$("#priceTotal span").text(totalPrice);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label class="hack43-radio-group w-radio">
<input type="radio" name="gastronomy" value="0" add-value="10">0<BR>
<input type="radio" name="gastronomy" value="550" add-value="10">550<BR>
<input type="radio" name="gastronomy" value="550" add-value="10">550<BR>
<input type="radio" name="gastronomy" value="550" add-value="10">550<BR>
</label>
<br>
<label class="hack43-radio-group w-radio">
<input type="radio" name="venue" value="0">0<BR>
<input type="radio" name="venue" value="10500">10500<BR>
<input type="radio" name="venue" value="10500">10500<BR>
<input type="radio" name="venue" value="10500">10500<BR>
</label>
<br>
<label class="hack43-radio-group w-radio">
<input type="radio" name="catering" value="0">0<BR>
<input type="radio" name="catering" value="40">40<BR>
<input type="radio" name="catering" value="45">45<BR>
<input type="radio" name="catering" value="60">60<BR>
</label>
<div class="hack42-45-added-value-row">
<div id="priceTotal">
<span>0</span>
</div>
</div>
When the condition is true you should use cateringFunc instead of $(this).val() when pushing into the values array and adding to totalPrice.
I assume you only want to get the added value from the selected radio button, so I added :checked to the selector. Then you also need to provide a default value if none of the gastronomy buttons are checked.
You shouldn't make up new attributes like add-value. If you need custom attributes, use data-XXX. These can be accessed using the jQuery .data() method.
$(".w-radio").change(function() {
var totalPrice = 0,
values = [];
$("input[type=radio]:checked").each(function() {
if ($(this).is('[name="catering"]')) {
var cateringFunc = (
$(this).val() * ($('[name="gastronomy"]:checked').data("add-value") || 0)
);
values.push(cateringFunc.toString());
totalPrice += cateringFunc;
}
values.push($(this).val());
totalPrice += parseInt($(this).val());
});
$("#priceTotal span").text(totalPrice);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label class="hack43-radio-group w-radio">
<input type="radio" name="gastronomy" value="0" data-add-value="10">0<BR>
<input type="radio" name="gastronomy" value="550" data-add-value="10">550<BR>
<input type="radio" name="gastronomy" value="550" data-add-value="10">550<BR>
<input type="radio" name="gastronomy" value="550" data-add-value="10">550<BR>
</label>
<br>
<label class="hack43-radio-group w-radio">
<input type="radio" name="venue" value="0">0<BR>
<input type="radio" name="venue" value="10500">10500<BR>
<input type="radio" name="venue" value="10500">10500<BR>
<input type="radio" name="venue" value="10500">10500<BR>
</label>
<br>
<label class="hack43-radio-group w-radio">
<input type="radio" name="catering" value="0">0<BR>
<input type="radio" name="catering" value="40">40<BR>
<input type="radio" name="catering" value="45">45<BR>
<input type="radio" name="catering" value="60">60<BR>
</label>
<div class="hack42-45-added-value-row">
<div id="priceTotal">
<span>0</span>
</div>
</div>
Related
Why is my counter always equal to zero even after the correct radio button is pressed?
In my Javascript code, I increment the counter when the right radio button is checked but when I check in the console, the counter doesn't get updated after the correct radio button is checked. Even after I click the submit button which calls a function clicked() that displays the counter. The counter still remains zero. Is there a reason why it doesn't get updated. Here is my Java Script code: var counter = 0; if (document.getElementById('blue').checked) { counter++; } if (document.getElementById('age3').checked) { counter++; } if (document.getElementById('hobby2').checked) { counter++; } if (document.getElementById('game3').checked) { counter++; } if (document.getElementById('language4').checked) { counter++; } function clicked() { document.getElementById("result").innerHTML = "You got " + counter; } <h1>Quiz</h1> <form> <p>(1) What is my favourite Color?</p> <input type="radio" id="blue" name="color" value="blue"> <label for="blue">blue</label><br> <input type="radio" id="red" name="color" value="red"> <label for="red">red</label><br> <input type="radio" id="green" name="color" value="green"> <label for="green">green</label><br> <input type="radio" id="purple" name="color" value="purple"> <label for="purple">purple</label> <br> <p>(2) How Old am I?</p> <input type="radio" id="age1" name="age" value="20"> <label for="age1">20</label><br> <input type="radio" id="age2" name="age" value="22"> <label for="age2">22</label><br> <input type="radio" id="age3" name="age" value="21"> <label for="age3">21</label><br> <input type="radio" id="age4" name="age" value="23"> <label for="age4">23</label> <br> <p>(3) Which of the following is not of a hobby of mine?</p> <input type="radio" id="hobby1" name="hobby" value="swimming"> <label for="hobby1">swimming</label><br> <input type="radio" id="hobby2" name="hobby" value="soccer"> <label for="hobby2">soccer</label><br> <input type="radio" id="hobby3" name="hobby" value="chess"> <label for="hobby3">chess</label><br> <input type="radio" id="hobby4" name="hobby" value="coding"> <label for="hobby4">coding</label> <br> <p>(4) Which of the following is a game that I like?</p> <input type="radio" id="game1" name="game" value="NBA"> <label for="game1">NBA</label><br> <input type="radio" id="game2" name="game" value="FortNite"> <label for="game2">FortNite</label><br> <input type="radio" id="game3" name="game" value="God of War"> <label for="game3">God of War</label><br> <input type="radio" id="game4" name="game" value="Call of Duty"> <label for="game4">Call of Duty</label> <p>(5) At what is my favourite language</p> <input type="radio" id="language1" name="language" value="python"> <label for="language1">python</label><br> <input type="radio" id="language2" name="language" value="Javascript"> <label for="language2">Javascript</label><br> <input type="radio" id="language3" name="language" value="C++"> <label for="language3">C++</label><br> <input type="radio" id="language4" name="language" value="Java"> <label for="language4">Java</label><br><br> </form> <button onclick="clicked()">Submit</button> <p id="result"> </p>
Put all those radio button checkings into a function and call that function when you hit submit. This should solve your problem. var counter = 0; function updateCounter(){ if (document.getElementById('blue').checked) { counter++; } if (document.getElementById('age3').checked) { counter++; } if (document.getElementById('hobby2').checked) { counter++; } if (document.getElementById('game3').checked) { counter++; } if (document.getElementById('language4').checked) { counter++; } } function clicked() { updateCounter() document.getElementById("result").innerHTML = "You got " + counter; //reset the counter back to zero after displaying score counter = 0 } <h1>Quiz</h1> <form> <p>(1) What is my favourite Color?</p> <input type="radio" id="blue" name="color" value="blue"> <label for="blue">blue</label><br> <input type="radio" id="red" name="color" value="red"> <label for="red">red</label><br> <input type="radio" id="green" name="color" value="green"> <label for="green">green</label><br> <input type="radio" id="purple" name="color" value="purple"> <label for="purple">purple</label> <br> <p>(2) How Old am I?</p> <input type="radio" id="age1" name="age" value="20"> <label for="age1">20</label><br> <input type="radio" id="age2" name="age" value="22"> <label for="age2">22</label><br> <input type="radio" id="age3" name="age" value="21"> <label for="age3">21</label><br> <input type="radio" id="age4" name="age" value="23"> <label for="age4">23</label> <br> <p>(3) Which of the following is not of a hobby of mine?</p> <input type="radio" id="hobby1" name="hobby" value="swimming"> <label for="hobby1">swimming</label><br> <input type="radio" id="hobby2" name="hobby" value="soccer"> <label for="hobby2">soccer</label><br> <input type="radio" id="hobby3" name="hobby" value="chess"> <label for="hobby3">chess</label><br> <input type="radio" id="hobby4" name="hobby" value="coding"> <label for="hobby4">coding</label> <br> <p>(4) Which of the following is a game that I like?</p> <input type="radio" id="game1" name="game" value="NBA"> <label for="game1">NBA</label><br> <input type="radio" id="game2" name="game" value="FortNite"> <label for="game2">FortNite</label><br> <input type="radio" id="game3" name="game" value="God of War"> <label for="game3">God of War</label><br> <input type="radio" id="game4" name="game" value="Call of Duty"> <label for="game4">Call of Duty</label> <p>(5) At what is my favourite language</p> <input type="radio" id="language1" name="language" value="python"> <label for="language1">python</label><br> <input type="radio" id="language2" name="language" value="Javascript"> <label for="language2">Javascript</label><br> <input type="radio" id="language3" name="language" value="C++"> <label for="language3">C++</label><br> <input type="radio" id="language4" name="language" value="Java"> <label for="language4">Java</label><br><br> </form> <button onclick="clicked()">Submit</button> <p id="result"> </p>
Every time you are getting the value as 0 as the login you written is not calling on clicking of radio button. First thing Just defined the all radio button into a method like below. function SelectValue () { counter = 0; if (document.getElementById('blue').checked) { counter++; } if (document.getElementById('age3').checked) { counter++; } if (document.getElementById('hobby2').checked) { counter++; } if (document.getElementById('game3').checked) { counter++; } if (document.getElementById('language4').checked) { counter++; } } Now there is two way you can call. Either call that method in each and every method like below. <p>(1) What is my favourite Color?</p> <input type="radio" id="blue" name="color" value="blue" onclick="clickmethodthod()"> <label for="blue">blue</label><br> Write a logic of click and attached to all radio button. let counter = 0; const radios = document.querySelector('input[type="radio"]'); for(radio in radios) { radios[radio].onclick = function() { SelectValue () } } Let me know if you are getting any issue.
Radio buttons in the form, if one checked then unchecked the others?
I have three different group of radio buttons in my form. If I click on the radio button I don't see attribute checked set to true. I'm wondering what is the best way to handle this in JQuery/JavaScript? Here is example: $("input[type=radio]").on('click', function() { var secondClick = true; $(this).change(function() { secondClick = false; }); $(this).click(function() { if (secondClick) { $(this).prop("checked", false); } secondClick = true; }); }); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form name="myForm" id="myForm" method="POST" action="#"> <div class="formItem"> <label for="evaluation">Evaluation</label> <input type="radio" name="frm_eval" id="frm_eval1" value="0" />Yes <input type="radio" name="frm_eval" id="frm_eval2" value="1" />No </div> <div class="formItem"> <label for="conditions">Conditions</label> <input type="radio" name="frm_cond" id="frm_cond1" value="0" />Good <input type="radio" name="frmhs_cond" id="frm_cond2" value="1" />Fair <input type="radio" name="frm_cond" id="frm_cond3" value="2" />Poor </div> <div class="formItem"> <label for="responses">Responses</label> <input type="radio" name="frm_res" id="frm_res1" value="0" />Good <input type="radio" name="frm_res" id="frm_res2" value="1" />Fair <input type="radio" name="frm_res" id="frm_res3" value="2" />Poor </div> </form> Function above did not change/set the attribute checked=true on the element that I clicked. I would like to see selected element with an attribute checked true and all other check boxes to be set to false.
var radioInputs = $("#myForm input[type=radio]") radioInputs.on('change',function() { var $this = $(this) if ($this.is(':checked')) { radioInputs.not($this).removeAttr('checked') } })
Your second input in conditions was named frmhs_cond instead of frm_cond <form name="myForm" id="myForm" method="POST" action="#"> <div class="formItem"> <label for="evaluation">Evaluation</label> <input type="radio" name="frm_eval" id="frm_eval1" value="0" />Yes <input type="radio" name="frm_eval" id="frm_eval2" value="1" />No </div> <div class="formItem"> <label for="conditions">Conditions</label> <input type="radio" name="frm_cond" id="frm_cond1" value="0" />Good <input type="radio" name="frm_cond" id="frm_cond2" value="1" />Fair <input type="radio" name="frm_cond" id="frm_cond3" value="2" />Poor </div> <div class="formItem"> <label for="responses">Responses</label> <input type="radio" name="frm_res" id="frm_res1" value="0" />Good <input type="radio" name="frm_res" id="frm_res2" value="1" />Fair <input type="radio" name="frm_res" id="frm_res3" value="2" />Poor </div> </form>
Calculate total on checkbox checked
HTML <div id="catlist"> <input type="checkbox" id="cat_1" value="cat_1" price="1.5" /><label for="cat_1">cat_1</label><br/> <input type="checkbox" id="cat_2" value="cat_2" price="2" /><label for="cat_2">cat_2</label><br/> <input type="checkbox" id="cat_3" value="cat_3" price="3.5" /><label for="cat_3">cat_3</label><br/> <input type="checkbox" id="cat_4" value="cat_4" price="4" /><label for="cat_4">cat_4</label><br/> <input type="checkbox" id="cat_5" value="cat_5" price="5" /><label for="cat_5">cat_5</label><br/> <input type="checkbox" id="cat_6" value="cat_6" price="6.5" /><label for="cat_6">cat_6</label><br/> <input type="checkbox" id="cat_7" value="cat_7" price="7" /><label for="cat_7">cat_7</label><br/> <input type="checkbox" id="cat_8" value="cat_8" price="8" /><label for="cat_8">cat_8</label><br/> <input type="checkbox" id="cat_9" value="cat_9" price="9.5" /><label for="cat_9">cat_9</label> </div> <input type="text" id="total" value="0" /> Javascript function calcAndShowTotal(){ var total = 0; $('#catlist :checkbox[checked]').each(function(){ total =+ parseFloat($(this).attr('price')) || 0; }); $('#total').val(total); } $('#pricelist :checkbox').click(function(){ calcAndShowTotal(); }); calcAndShowTotal(); I am getting particular value. WHY? I tried sum of total, i tried jquery but no success..
Use $('#catlist :checkbox:checked') selector to select checked check-boxes [] is used as attribute selector and it could be used as '[type="checkbox"]' but it will not filter checked check-boxes + operator is not needed before parseFloat, it has to be total =+ Instead of calling handler, just invoke change handler using .change() function calcAndShowTotal() { var total = 0; $('#catlist :checkbox:checked').each(function() { total += parseFloat($(this).attr('price')) || 0; }); $('#total').val(total); } $('#catlist :checkbox').change(calcAndShowTotal).change(); <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <div id="catlist"> <input type="checkbox" id="cat_1" value="cat_1" price="1.5" /> <label for="cat_1">cat_1</label> <br/> <input type="checkbox" id="cat_2" value="cat_2" price="2" /> <label for="cat_2">cat_2</label> <br/> <input type="checkbox" id="cat_3" value="cat_3" price="3.5" /> <label for="cat_3">cat_3</label> <br/> <input type="checkbox" id="cat_4" value="cat_4" price="4" /> <label for="cat_4">cat_4</label> <br/> <input type="checkbox" id="cat_5" value="cat_5" price="5" /> <label for="cat_5">cat_5</label> <br/> <input type="checkbox" id="cat_6" value="cat_6" price="6.5" /> <label for="cat_6">cat_6</label> <br/> <input type="checkbox" id="cat_7" value="cat_7" price="7" /> <label for="cat_7">cat_7</label> <br/> <input type="checkbox" id="cat_8" value="cat_8" price="8" /> <label for="cat_8">cat_8</label> <br/> <input type="checkbox" id="cat_9" value="cat_9" price="9.5" /> <label for="cat_9">cat_9</label> </div> <input type="text" id="total" value="0" /> Using Array#reduce function calcAndShowTotal() { var total = [].reduce.call($('#catlist :checkbox:checked'), function(a, b) { return a + +$(b).attr('price') || 0; }, 0); $('#total').val(total); } $('#catlist :checkbox').change(calcAndShowTotal).change(); <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <div id="catlist"> <input type="checkbox" id="cat_1" value="cat_1" price="1.5" /> <label for="cat_1">cat_1</label> <br/> <input type="checkbox" id="cat_2" value="cat_2" price="2" /> <label for="cat_2">cat_2</label> <br/> <input type="checkbox" id="cat_3" value="cat_3" price="3.5" /> <label for="cat_3">cat_3</label> <br/> <input type="checkbox" id="cat_4" value="cat_4" price="4" /> <label for="cat_4">cat_4</label> <br/> <input type="checkbox" id="cat_5" value="cat_5" price="5" /> <label for="cat_5">cat_5</label> <br/> <input type="checkbox" id="cat_6" value="cat_6" price="6.5" /> <label for="cat_6">cat_6</label> <br/> <input type="checkbox" id="cat_7" value="cat_7" price="7" /> <label for="cat_7">cat_7</label> <br/> <input type="checkbox" id="cat_8" value="cat_8" price="8" /> <label for="cat_8">cat_8</label> <br/> <input type="checkbox" id="cat_9" value="cat_9" price="9.5" /> <label for="cat_9">cat_9</label> </div> <input type="text" id="total" value="0" />
Instead of looping you can use change which will respond to and change event on the checkbox. Also you need add or subtract value like this += for addition on -= for subtraction var _total = 0; $('input[type="checkbox"]').change(function() { if($(this).is(':checked')){ _total += parseFloat($(this).attr('price')) || 0; } else{ _total -= parseFloat($(this).attr('price')) || 0; } $('#total').val(_total); }) JSFIDDLE
$('input:checkbox').change(function(){ var totalprice=0; $('input:checkbox:checked').each(function(){ totalprice+= parseFloat($(this).attr('price')); }); $('#total').val(totalprice) });
Naming html optionfields and checkboxes to use it properly in jquery
I'm trying to get a value in array and then display it. This works well for the one I have html:<input id="email" type="email" name="email" required="required" /> jquery: $('#email').on('keyup', updateStatus); person[0] = $('#email').val(); but when I do this with optionfields or checkboxes, this doesn't work: I always get the value female in the optionfields and the value 1 in the checkboxes. How do I have to name them to get it working? <input type="radio" id="gender" name="gender" value="Male">Male</input> <input type="radio" id="gender" name="gender" value="Female">Female</input> <label> <input type="checkbox" id="chbx1" name="sportart" value="1" />1</label> <label> <input type="checkbox" id="chbx1" name="sportart" value="2" />2</label> <label> <input type="checkbox" id="chbx1" name="sportart" value="3" />3</label> <label> <input type="checkbox" id="chbx1" name="sportart" value="4" />4</label> And the jquery: $('#gender').on('blur', updateStatus); $('#chbx1').on('blur', updateStatus); person[3] = $('#gender').val(); person[4] = $('#chbx1').val(); This is my updateStatus function: function updateStatus() { var person = []; person[0] = $('#email').val(); person[1] = $('#passwort').val(); person[2] = $('#passwortwd').val(); person[3] = $('#gender').val(); person[4] = $('#chbx1').val(); person[5] = $('#hobby').val(); $('#status').text(JSON.stringify(person)); }
HTML ID should be unique. Several items cannot have the same ID. Selection by ID (#...) will always return one item. For example, check this snipper out: document.write("By name:" + $("[name='gender']").length + "<br/>"); document.write("By ID:" + $("#gender").length + "<br/>"); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="radio" id="gender" name="gender" value="Male"/>Male <input type="radio" id="gender" name="gender" value="Female"/>Female <br/><br/> You should assign event to all elements with name sportart this way: $("input[name='sportart']").on('change', function() { alert(this.value); }); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="checkbox" name="sportart" value="1" />1<br/> <input type="checkbox" name="sportart" value="2" />2<br/> <input type="checkbox" name="sportart" value="3" />3<br/> <input type="checkbox" name="sportart" value="4" />4 You can always get the selected radio or checkbox value using the :checked selector: var arr = $("input[name='sportart']:checked"); // for checkbox it is array alert(arr.length); // count of selected items alert(arr[0].value); // value of the first one $("input[name='gender']:checked").val();
Try using change handler and use name attribute selector: $('input[name=gender], input[name=sportart]').on('change', updateStatus); person[3] = $('input[name=gender]:checked').val(); person[4] = $('input[name=sportart]:checked').val(); Example: var pushStatus = function() { var o = {}; o.gender = $('input[name=gender]:checked').val(); o.sportart = $('input[name=sportart]:checked').map(function() { return this.value; }).get().join(','); $('#status').html(JSON.stringify(o)); }; $(function() { $('input[name=gender], input[name=sportart]').on('change', pushStatus); }); <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <input type="radio" name="gender" value="Male" />Male <input type="radio" name="gender" value="Female" />Female <label> <input type="checkbox" name="sportart" value="1" />1</label> <label> <input type="checkbox" name="sportart" value="2" />2</label> <label> <input type="checkbox" name="sportart" value="3" />3</label> <label> <input type="checkbox" name="sportart" value="4" />4</label> <div id="status"></div>
Traverse object and return matching key / values
I have a series of objects containing product information that I need to use to filter the available product options. (i.e. Customer selects radio button with value option id 25, I need to filter the other two options based on what's available for id 25 and then get the value for that three part combination from configurations (25 / 1 / 13) and find that combination in siblings to return the sku value (25 / 1/ 13 = 1761). I've been successful at getting the keys and values but not matching. I'm a total n00b with javascript (most of my experience is just animating things with jQuery) so I'm not sure that I have written anything worthwhile so far. Here's what I get from the encoded JSON (trimmed b/c data is massive so formatting might not be exact). I don't have any control over formatting and structure of the JSON. var configurations = { "lens_types":{ "25":{ "1":1, "2":2, "4":4, "3":3}}, "lenses":{ "25":{ "1":{ "2":2, "4":4, "5":5, "6":6, "9":9, "13":13}, "2":{ "4":4, "5":5, "6":6, "13":13}}} var siblings = { "25":{ "1":{ "2":1744, "4":1745, "5":1747}, "6":1749, "9":1752, "13":1761}, "2":{ "4":1746, "5":1748, "6":1750, "13":1762}, "4":{ "1":1753, "3":1756, "8":1759}, "3":{ "2":1754, "3":1755, "8":1757, "9":1758, "12":1760}}} This is the generic structure of the product form: <form method="post" action="" name="product_details"> <div id="frame_style"> <input type="radio" name="frame_style" value="1" /> <input type="radio" name="frame_style" value="3" /> <input type="radio" name="frame_style" value="11" /> <input type="radio" name="frame_style" value="24" /> <input type="radio" name="frame_style" value="25" /> <input type="radio" name="frame_style" value="27" /> <input type="radio" name="frame_style" value="2" /> <input type="radio" name="frame_style" value="8" /> <input type="radio" name="frame_style" value="45" /> <input type="radio" name="frame_style" value="77" /> <input type="radio" name="frame_style" value="89" /> <input type="radio" name="frame_style" value="13" /> </div> <div id="lens_type"> <input type="radio" name="lens_type" value="1" /> <input type="radio" name="lens_type" value="2" /> <input type="radio" name="lens_type" value="3" /> <input type="radio" name="lens_type" value="4" /> </div> <div id="lens_style"> <input type="radio" name="lens_style" value="1" /> <input type="radio" name="lens_style" value="2" /> <input type="radio" name="lens_style" value="3" /> <input type="radio" name="lens_style" value="4" /> <input type="radio" name="lens_style" value="5" /> <input type="radio" name="lens_style" value="8" /> <input type="radio" name="lens_style" value="9" /> <input type="radio" name="lens_style" value="12" /> </div> </form> Any ideas? Thanks!! Edit Here's the full object for both: var configurations = {"lens_types":{"25":{"1":1,"2":2,"4":4,"3":3},"1":{"1":1,"2":2,"4":4,"3":3},"15":{"1":1,"2":2,"3":3},"26":{"1":1,"2":2,"3":3},"24":{"1":1,"2":2,"4":4,"3":3},"27":{"1":1,"2":2,"4":4,"3":3},"11":{"1":1,"2":2,"4":4,"3":3},"3":{"1":1,"2":2,"4":4,"3":3}}, "lenses":{"25":{"1":{"2":2,"4":4,"5":5,"6":6,"9":9,"13":13},"2":{"4":4,"5":5,"6":6,"13":13},"4":{"1":1,"3":3,"8":8},"3":{"2":2,"3":3,"8":8,"9":9,"12":12}},"1":{"1":{"2":2,"4":4,"5":5,"6":6,"9":9,"13":13},"2":{"4":4,"5":5,"6":6,"13":13},"4":{"1":1,"3":3,"8":8},"3":{"2":2,"3":3,"8":8,"9":9,"12":12}},"15":{"1":{"2":2,"4":4,"5":5,"6":6,"9":9,"13":13},"2":{"4":4,"5":5,"6":6,"13":13},"3":{"2":2,"3":3,"8":8,"9":9}},"26":{"1":{"2":2,"4":4,"5":5,"6":6,"9":9,"13":13},"2":{"4":4,"5":5,"6":6,"13":13},"3":{"2":2,"3":3,"8":8,"9":9}},"24":{"1":{"2":2,"4":4,"5":5,"6":6,"9":9,"13":13},"2":{"4":4,"5":5,"6":6,"13":13},"4":{"1":1,"3":3,"8":8},"3":{"2":2,"3":3,"8":8,"9":9,"12":12}},"27":{"1":{"2":2,"4":4,"5":5,"6":6,"9":9,"13":13},"2":{"4":4,"5":5,"6":6,"13":13},"4":{"1":1,"3":3,"8":8},"3":{"2":2,"3":3,"8":8,"9":9,"12":12}},"11":{"1":{"2":2,"4":4,"5":5,"6":6,"9":9,"13":13},"2":{"4":4,"5":5,"6":6,"13":13},"4":{"1":1,"3":3,"8":8},"3":{"2":2,"3":3,"8":8,"9":9,"12":12}},"3":{"1":{"2":2,"4":4,"5":5,"9":9},"2":{"4":4,"5":5,"6":6},"4":{"1":1,"3":3,"8":8},"3":{"2":2,"3":3,"8":8,"9":9,"12":12}}}} var siblings = {"25":{"1":{"2":1744,"4":1745,"5":1747,"6":1749,"9":1752,"13":1761},"2":{"4":1746,"5":1748,"6":1750,"13":1762},"4":{"1":1753,"3":1756,"8":1759},"3":{"2":1754,"3":1755,"8":1757,"9":1758,"12":1760}},"1":{"1":{"2":1769,"4":1770,"5":1772,"6":1774,"9":1777,"13":1786},"2":{"4":1771,"5":1773,"6":1775,"13":1787},"4":{"1":1778,"3":1781,"8":1784},"3":{"2":1779,"3":1780,"8":1782,"9":1783,"12":1785}},"15":{"1":{"2":1794,"4":1795,"5":1797,"6":1799,"9":1802,"13":1807},"2":{"4":1796,"5":1798,"6":1800,"13":1808},"3":{"2":1803,"3":1804,"8":1805,"9":1806}},"26":{"1":{"2":1809,"4":1810,"5":1812,"6":1814,"9":1817,"13":1822},"2":{"4":1811,"5":1813,"6":1815,"13":1823},"3":{"2":1818,"3":1819,"8":1820,"9":1821}},"24":{"1":{"2":1824,"4":1825,"5":1827,"6":1829,"9":1832,"13":1841},"2":{"4":1826,"5":1828,"6":1830,"13":1842},"4":{"1":1833,"3":1836,"8":1839},"3":{"2":1834,"3":1835,"8":1837,"9":1838,"12":1840}},"27":{"1":{"2":1843,"4":1844,"5":1846,"6":1848,"9":1851,"13":1860},"2":{"4":1845,"5":1847,"6":1849,"13":1861},"4":{"1":1852,"3":1855,"8":1858},"3":{"2":1853,"3":1854,"8":1856,"9":1857,"12":1859}},"11":{"1":{"2":1862,"4":1863,"5":1865,"6":1867,"9":1870,"13":1879},"2":{"4":1864,"5":1866,"6":1868,"13":1880},"4":{"1":1871,"3":1874,"8":1877},"3":{"2":1872,"3":1873,"8":1875,"9":1876,"12":1878}},"3":{"1":{"2":1881,"4":1882,"5":1884,"9":1888},"2":{"4":1883,"5":1885,"6":1886},"4":{"1":1889,"3":1892,"8":1895},"3":{"2":1890,"3":1891,"8":1893,"9":1894,"12":1896}}}
You could do something like: $('#frame_style input:radio').click(function(){ var val = $(this).val(); for ( var ind in configurations['lenses'][val]){ var input = '<input type="radio" name="lens_type" value="'+ind+'" >'+ind; $('#lens_type').append(input); } }); $('#lens_type input:radio').live('click', function(){ var frame = $('#frame_style input:radio:checked').val(); var val = $(this).val(); for ( var ind in configurations['lenses'][frame][val]){ var input = '<input type="radio" name="lens_style" value="'+ind+'" >'+ind; $('#lens_style').append(input); } }); $('#lens_style input:radio').live('click', function(){ var frame = $('#frame_style input:radio:checked').val(); var type = $('#lens_type input:radio:checked').val(); var style = $(this).val() alert('Sku is:'+siblings[frame][type][style]); }); the idea is to create the radios after the user select the first level. Of course this is very basic, you can try this fiddle: http://jsfiddle.net/LL3SM/ and choos 25, 1, 2 you will get an alert with the sku