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(); 

jsfiddle code

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

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -