简体   繁体   中英

Code for changing dropdown menu when clicked on radio button using jquery won't work?

I'm new to jQuery and I'm trying to create a dynamic drop down menu where the content changes as you click on a radio button. Here is my html and javascript code:

Html code:

<div class="input-group">
                    Private Museum
                    <input type="radio" id="PublicPrivate1" name="publicPrivate" value="private museum" checked>
                    Public Museum
                    <input type="radio" id="PublicPrivate2" name="publicPrivate">

                    <select class="form-control" name="museum_type" id="museum_type">
                    </select>
                </div>

jQuery script:

<script>
                    $("input[type='radio'][name='publicPrivate']").change(function () {

                        var selected = $("input[type='radio'][name='publicPrivate']:checked").val();

                        if  (selected.equals("private museum")){
                            var opts = [
                                {name: "Please Select", val: ""},
                                {name: "School-based", val: "1"},
                                {name: "Religious Institution", val: "2"},
                                {name: "Organization", val: "3"},
                                {name: "Foundation", val: "4"}
                            ];
                            }
                        else{
                            var opts = [
                                {name: "Please Select", val: ""},
                                {name: "School-based", val: "1"},
                                {name: "Local Government Unit", val: "2"},
                                {name: "National Agency", val: "3"}
                            ];
                            }
                        $("#museum_type").empty();

                        $.each(opts, function (k, v) {

                            $("#museum_type").append("<option value='" + v.val + "'>" + v.name + "</option>");

                        });
                    });
                </script>

iCheck code (check comments for reason why I included this):

        <script src="plugins/iCheck/icheck.min.js"></script>
    <script>
        $(function () {
            $('input').iCheck({
                checkboxClass: 'icheckbox_square-blue',
                radioClass: 'iradio_square-blue',
                increaseArea: '20%' // optional
            });
        });
    </script>

It's not recognizing selected.equals. If you instead change it to if(selected == "private museum") it will work.

 $("input[type='radio'][name='publicPrivate']").change(function () { var selected = $("input[type='radio'][name='publicPrivate']:checked").val(); if (selected =="private museum"){ var opts = [ {name: "Please Select", val: ""}, {name: "School-based", val: "1"}, {name: "Religious Institution", val: "2"}, {name: "Organization", val: "3"}, {name: "Foundation", val: "4"} ]; } else{ var opts = [ {name: "Please Select", val: ""}, {name: "School-based", val: "1"}, {name: "Local Government Unit", val: "2"}, {name: "National Agency", val: "3"} ]; } $("#museum_type").empty(); $.each(opts, function (k, v) { $("#museum_type").append("<option value='" + v.val + "'>" + v.name + "</option>"); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="input-group"> Private Museum <input type="radio" id="PublicPrivate1" name="publicPrivate" value="private museum" checked> Public Museum <input type="radio" id="PublicPrivate2" name="publicPrivate"> <select class="form-control" name="museum_type" id="museum_type"> </select> </div> 

The dropdown should have some inital list as you have one radio button is selected.

And equals is not a method in javascript or jquery, so use == or ===

  $("input[type='radio'][name='publicPrivate']").change(function () { debugger; var selected = $("input[type='radio'][name='publicPrivate']:checked").val(); if (selected=="private museum"){ var opts = [ {name: "Please Select", val: ""}, {name: "School-based", val: "1"}, {name: "Religious Institution", val: "2"}, {name: "Organization", val: "3"}, {name: "Foundation", val: "4"} ]; } else{ var opts = [ {name: "Please Select", val: ""}, {name: "School-based", val: "1"}, {name: "Local Government Unit", val: "2"}, {name: "National Agency", val: "3"} ]; } $("#museum_type").empty(); $.each(opts, function (k, v) { $("#museum_type").append("<option value='" + v.val + "'>" + v.name + "</option>"); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="input-group"> <input type="radio" id="PublicPrivate1" name="publicPrivate" value="private museum" checked> Private Museum </input> <input type="radio" id="PublicPrivate2" name="publicPrivate"> Public Museum</input> <select class="form-control" name="museum_type" id="museum_type"> <option value="0">Please Select</option> <option value="1">School-based</option> <option value="2">Religious Institution</option> <option value="3">Organization</option> <option value="4">Foundation</option> </select> </div> 

Your code can be simplified in many ways.

I have made an example and added comments to the code below so you understand what was done / can be changed.

 //this function is called on page load (shorthand to $(document).ready(function(){}); $(function() { //defined an object to store both "private" and "public" options var $opts = { private: [{ name: "Please Select", val: "" }, { name: "School-based", val: "1" }, { name: "Religious Institution", val: "2" }, { name: "Organization", val: "3" }, { name: "Foundation", val: "4" }], public: [{ name: "Please Select", val: "" }, { name: "School-based", val: "1" }, { name: "Local Government Unit", val: "2" }, { name: "National Agency", val: "3" }] } //calling this function to populate your select on page load fillSelect(); $('.option').change(function() { //added a common class to both radios and resumed the event to a function call fillSelect(); }); //function that gets the current selected radio and calls another function sending the respective object to fill function fillSelect() { var selected = $('.option:checked').val(); if (selected == 'private museum') { appendOptions($opts.private); } else { appendOptions($opts.public); } } //function that populates the select according to the received object as parameter function appendOptions(options) { $("#museum_type").empty(); $.each(options, function(k, v) { $("#museum_type").append("<option value='" + v.val + "'>" + v.name + "</option>"); }); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="input-group"> Private Museum <input type="radio" id="PublicPrivate1" class="option" name="publicPrivate" value="private museum" checked> Public Museum <input type="radio" id="PublicPrivate2" class="option" name="publicPrivate"> <select class="form-control" name="museum_type" id="museum_type"> </select> </div> 

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