javascript - How to sort values in my json object -
i sort "years" in yearobject
of type object
menu starts 2016 instead of 2013. please help. example of code provided here.
my html:
<form name="myform" id="myform"> <select name="optone" id="yearsel" size="1"> <option value="" selected="selected">select year</option> </select> <br> <br> <select name="opttwo" id="statesel" size="1"> <option value="" selected="selected">please select year first</option> </select> <br> <br> <select name="optthree" id="citysel" size="1" citysel.onchange = function();> <option value="" selected="selected">please select state first</option> </select> </form>
my js:
var yearobject = { "2016": { "california": ["los angeles", "san francisco"], "florida": ["orlando", "miami"], "new york": ["manhattan","brooklyn"] }, "2015": { "california": ["los angeles", "san francisco"], "florida": ["orlando", "miami"], "new york": ["manhattan","brooklyn"] }, "2014": { "california": ["los angeles", "san francisco"], "florida": ["orlando", "miami"], "new york": ["manhattan","brooklyn"] }, "2013": { "california": ["los angeles", "san francisco"], "florida": ["orlando", "miami"], "new york": ["manhattan","brooklyn"] } } window.onload = function () { var yearsel = document.getelementbyid("yearsel"), statesel = document.getelementbyid("statesel"), citysel = document.getelementbyid("citysel"); (var year in yearobject) { yearsel.options[yearsel.options.length] = new option(year, year); } yearsel.onchange = function () { statesel.length = 1; // remove options bar first citysel.length = 1; // remove options bar first if (this.selectedindex < 1) { statesel.options[0].text = "please select year first" citysel.options[0].text = "please select state first" return; // done } statesel.options[0].text = "please select state" (var state in yearobject[this.value]) { statesel.options[statesel.options.length] = new option(state, state); } if (statesel.options.length==2) { statesel.selectedindex=1; statesel.onchange(); } } yearsel.onchange(); // reset in case page reloaded statesel.onchange = function () { citysel.length = 1; // remove options bar first if (this.selectedindex < 1) { citysel.options[0].text = "please select state first" return; // done } citysel.options[0].text = "please select city" var cities = yearobject[yearsel.value][this.value]; (var = 0; < cities.length; i++) { citysel.options[citysel.options.length] = new option(cities[i], cities[i]); } if (citysel.options.length==2) { citysel.selectedindex=1; citysel.onchange(); } } citysel.onchange = function(){ switch(citysel.value){ case "los angeles": if(yearsel.value == "2016"){ location.href="http://google.com"; }else if(yearsel.value == "2015","2014"){ location.href= "http://facebook.com"; } break; case "miami": if(yearsel.value == "2016","2015"){ location.href="http://google.com"; }else if(yearsel.value == "2014","2013"){ location.href= "http://facebook.com"; } break; } } }
you need create separate array year
, sort using sort()
function in javascript.
var sortable = []; (var year in yearobject) { sortable.push(year); } sortable.sort(function(a, b){return b-a}); (var = 0; < sortable.length; i++){ yearsel.options[yearsel.options.length] = new option(sortable[i], sortable[i]); }
have @ fiddle
Comments
Post a Comment