I have two selects:
<select name="select1" id="select1"> <option value="1">Fruit</option> <option value="2">Animal</option> <option value="3">Bird</option> <option value="4">Car</option> </select> <select name="select2" id="select2"> <option value="1">Banana</option> <option value="1">Apple</option> <option value="1">Orange</option> <option value="2">Wolf</option> <option value="2">Fox</option> <option value="2">Bear</option> <option value="3">Eagle</option> <option value="3">Hawk</option> <option value="4">BWM<option> </select>
How do I do that with jQuery if I choose Fruit in the first select? The second select would show me only Fruits - Banana, Apple, Orange. If I choose Bird in the first select, the second select would show me only Birds - Eagle, Hawk. And so on...
I tried to do it with this piece of jQuery code:
$("#select1").change(function() { var id = $(this).val(); $('#select2 option[value!='+id+']').remove(); });
Unfortunately, it removes almost everything, and I have no idea how to bring back some options. I also read something about clone, but I don't know how to use it in this case.
change(function() { var id = $(this). val(); $('#select2 option[value!= '+id+']'). remove(); });
With jQuery, you can use the . val() method to get an array of the selected values on a multi-select dropdown list.
Syntax of jQuery Select Option$(“selector option: selected”); The jQuery select option is used to display selected content in the option tag. text syntax is below: var variableValue = $(“selector option: selected”).
$("#select1").change(function() { if ($(this).data('options') === undefined) { /*Taking an array of all options-2 and kind of embedding it on the select1*/ $(this).data('options', $('#select2 option').clone()); } var id = $(this).val(); var options = $(this).data('options').filter('[value=' + id + ']'); $('#select2').html(options); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <select name="select1" id="select1"> <option value="1">Fruit</option> <option value="2">Animal</option> <option value="3">Bird</option> <option value="4">Car</option> </select> <select name="select2" id="select2"> <option value="1">Banana</option> <option value="1">Apple</option> <option value="1">Orange</option> <option value="2">Wolf</option> <option value="2">Fox</option> <option value="2">Bear</option> <option value="3">Eagle</option> <option value="3">Hawk</option> <option value="4">BWM<option> </select>
Using jQuery data() to store data
I guess hiding elements doesn't work cross-browser(2012), I have'nt tested it myself.
I wanted to make a version of this that uses $.getJSON() from a separate JSON file.
Demo: here
JavaScript:
$(document).ready(function () { "use strict"; var selectData, $states; function updateSelects() { var cities = $.map(selectData[this.value], function (city) { return $("<option />").text(city); }); $("#city_names").empty().append(cities); } $.getJSON("updateSelect.json", function (data) { var state; selectData = data; $states = $("#us_states").on("change", updateSelects); for (state in selectData) { $("<option />").text(state).appendTo($states); } $states.change(); }); });
HTML:
<!DOCTYPE html> <html> <head> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> </head> <body> <select id="us_states"></select> <select id="city_names"></select> <script type="text/javascript" src="updateSelect.js"></script> </body> </html>
JSON:
{ "NE": [ "Smallville", "Bigville" ], "CA": [ "Sunnyvale", "Druryburg", "Vickslake" ], "MI": [ "Lakeside", "Fireside", "Chatsville" ] }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With