jquery - Default selected value on select are not visible when change value dynamically -
i have 3 select dropdowns 2nd , 3rd depended on choice of 1st dropdown.
each of them has default choice show when page loads. managed make work, 2nd , 3rd dropdowns change options based on first one, however, 2 stays empty on load if first choice selected when click on them.
html
<div id="additional-number-options-284"> <select class="form-control" id="select-additional-number-country-284"> <option disabled="disabled" selected="selected">select country</option> <option value="7818">country 1</option> <option value="7814">country 2</option> </select> <select id="select-additional-number-state-284"> <option disabled="disabled" selected="selected">select state</option> <option data-product="7818" value="65">state 4</option> <option data-product="7818" value="66">state 5</option> <option data-product="7814" value="62">state 1</option> <option data-product="7814" value="63">state 2</option> <option data-product="7814" value="64">state 3</option> </select> <select id="select-additional-number-plan-284"> <option disabled="disabled" selected="selected">select plan</option> <option data-product="7818" value="7819">plan d (+$5.00)</option> <option data-product="7818" value="7820">plan e (+$15.00)</option> <option data-product="7814" value="7815">plan (+$10.00)</option> <option data-product="7814" value="7816">plan b (+$8.00)</option> <option data-product="7814" value="7817">plan c (+$12.00)</option> </select> </div> jquery
jquery("[id^=select-additional-number-country-]").change(function() { var id = this.id.split('-').pop(); jquery("#select-additional-number-state-" + id) .find("option") .show() .not("option:first, option[data-product='" + this.value + "']") .hide(); jquery("#select-additional-number-state-" + id).val( jquery("#select-additional-number-state" + id).find("option:visible:first").val()); jquery("#select-additional-number-plan-" + id) .find("option") .show() .not("option:first, option[data-product='" + this.value + "']") .hide(); jquery("#select-additional-number-plan-" + id).val( jquery("#select-additional-number-plan" + id).find("option:visible:first").val()); }).change();
the issue because attribute begins selector invalid. need wrap value in quotes - not interpreted correctly. try this:
jquery(function($) { $('[id^="select-additional-number-country-"]').change(function() { var id = this.id.split('-').pop(); $("#select-additional-number-state-" + id).val('').find("option").show().not("option:first, option[data-product='" + this.value + "']").hide(); $("#select-additional-number-plan-" + id).val('').find("option").show().not("option:first, option[data-product='" + this.value + "']").hide(); }).change(); }); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="additional-number-options-284"> <select class="form-control" id="select-additional-number-country-284"> <option disabled="disabled" selected="selected">select country</option> <option value="7818">country 1</option> <option value="7814">country 2</option> </select> <select id="select-additional-number-state-284"> <option disabled="disabled" selected="selected" value="">select state</option> <option data-product="7818" value="65">state 4</option> <option data-product="7818" value="66">state 5</option> <option data-product="7814" value="62">state 1</option> <option data-product="7814" value="63">state 2</option> <option data-product="7814" value="64">state 3</option> </select> <select id="select-additional-number-plan-284"> <option disabled="disabled" selected="selected" value="">select plan</option> <option data-product="7818" value="7819">plan d (+$5.00)</option> <option data-product="7818" value="7820">plan e (+$15.00)</option> <option data-product="7814" value="7815">plan (+$10.00)</option> <option data-product="7814" value="7816">plan b (+$8.00)</option> <option data-product="7814" value="7817">plan c (+$12.00)</option> </select> </div> two other things note here. firstly use of aliased $ parameter of document.ready event handler. allows use $ instead of verbose jquery within scope of function.
secondly convoluted use of val() not required. can call val('') reset selected option when dependant select changed.
Comments
Post a Comment