简体   繁体   中英

Populate one dropdown based on selection in another

I need to change the contents of dropdown B based on the selection in dropdown A using javascript. There are no db queries involved--I know beforehand what the contents of B should be given the choice in A. I have found some examples using AJAX, but since there is no db query involved that's not necessary. Can anyone point me to some example code for how to do this?

 function configureDropDownLists(ddl1, ddl2) { var colours = ['Black', 'White', 'Blue']; var shapes = ['Square', 'Circle', 'Triangle']; var names = ['John', 'David', 'Sarah']; switch (ddl1.value) { case 'Colours': ddl2.options.length = 0; for (i = 0; i < colours.length; i++) { createOption(ddl2, colours[i], colours[i]); } break; case 'Shapes': ddl2.options.length = 0; for (i = 0; i < shapes.length; i++) { createOption(ddl2, shapes[i], shapes[i]); } break; case 'Names': ddl2.options.length = 0; for (i = 0; i < names.length; i++) { createOption(ddl2, names[i], names[i]); } break; default: ddl2.options.length = 0; break; } } function createOption(ddl, text, value) { var opt = document.createElement('option'); opt.value = value; opt.text = text; ddl.options.add(opt); } 
 <select id="ddl" onchange="configureDropDownLists(this,document.getElementById('ddl2'))"> <option value=""></option> <option value="Colours">Colours</option> <option value="Shapes">Shapes</option> <option value="Names">Names</option> </select> <select id="ddl2"> </select> 

Setup mine within a closure and with straight JavaScript, explanation provided in comments

 (function() { //setup an object fully of arrays //alternativly it could be something like //{"yes":[{value:sweet, text:Sweet}.....]} //so you could set the label of the option tag something different than the name var bOptions = { "yes": ["sweet", "wohoo", "yay"], "no": ["you suck!", "common son"] }; var A = document.getElementById('A'); var B = document.getElementById('B'); //on change is a good event for this because you are guarenteed the value is different A.onchange = function() { //clear out B B.length = 0; //get the selected value from A var _val = this.options[this.selectedIndex].value; //loop through bOption at the selected value for (var i in bOptions[_val]) { //create option tag var op = document.createElement('option'); //set its value op.value = bOptions[_val][i]; //set the display label op.text = bOptions[_val][i]; //append it to B B.appendChild(op); } }; //fire this to update B on load A.onchange(); })(); 
 <select id='A' name='A'> <option value='yes' selected='selected'>yes <option value='no'> no </select> <select id='B' name='B'> </select> 

Could you please have a look at: http://jsfiddle.net/4Zw3M/1/ .

Basically, the data is stored in an Array and the options are added accordingly. I think the code says more than a thousand words.

var data = [ // The data
    ['ten', [
        'eleven','twelve'
    ]],
    ['twenty', [
        'twentyone', 'twentytwo'
    ]]
];

$a = $('#a'); // The dropdowns
$b = $('#b');

for(var i = 0; i < data.length; i++) {
    var first = data[i][0];
    $a.append($("<option>"). // Add options
       attr("value",first).
       data("sel", i).
       text(first));
}

$a.change(function() {
    var index = $(this).children('option:selected').data('sel');
    var second = data[index][1]; // The second-choice data

    $b.html(''); // Clear existing options in second dropdown

    for(var j = 0; j < second.length; j++) {
        $b.append($("<option>"). // Add options
           attr("value",second[j]).
           data("sel", j).
           text(second[j]));
    }
}).change(); // Trigger once to add options at load of first choice

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM