Bootstrap selectpicker 无法处理动态选项

Bootstrap selectpicker is not working on dynamic option

我正在使用 bootstrap 选择器,但是当我使用 jquery 动态添加选项时它不起作用。

在手动添加选项 html 时比它正在唤醒

html

      <div class="form-group col-md-3">
         <label class="bold" >Exam Type</label>
            <select  class="exam_type_element_multiple"  name="exam_type_element" data-live-search="true" multiple data-style="btn-info" data-selected-text-format="count">
               <option value="1">Bank</option>
               <option value="3">Railways</option>
            </select>
        </div> 
        <div class="form-group col-md-3 ">
           <label class="bold" >Sub Exam Type</label>
           <select  class="exam_sub_type_element_multiple"  name="exam_sub_type_element" data-live-search="true" multiple data-style="btn-warning" data-selected-text-format="count">

           </select>
         </div> 

jquery

$('.exam_type_element_multiple').on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) {
    all_cat = $main_stream_result_json;
    main_selected  = $(this).val();
    var html = '';
    $.each(main_selected, function( index, value ) {
        $.each(all_cat, function( i, v ) {
            if(value == v.id){
                html +=  '<optgroup label="'+v.name+'">';
            }
        });
        $.each(all_cat, function( i, v ) {
            if(value == v.parent_id){
                html +=  '<option value="'+v.id+'">'+v.name+'</option>';
            }
        });
        html +='</optgroup>';
    });
    $('.exam_sub_type_element_multiple').selectpicker('destroy');
    $('.exam_sub_type_element_multiple').html($.parseHTML(html));
    // if uncommenting this line than this option is working 
    //$('.exam_sub_type_element_multiple').html('<option value="123">123</option>'); 
    $('.exam_sub_type_element_multiple').selectpicker('render');

使用 $('#exam_sub_type_element_multiple').selectpicker('refresh'); 并且不要忘记为该 select 元素使用 ID。

$(document).ready(function(){
$('.exam_type_element_multiple,#exam_sub_type_element_multiple').selectpicker();

});


$('.exam_type_element_multiple').on('change', function (e, clickedIndex, isSelected, previousValue) {
    var all_cat =jQuery.parseJSON( '[{"id":"1", "parent_id":"3", "name":"abc"},{"id":"3", "parent_id":"1", "name":"cde"}]');
    var main_selected  = $(this).val();
    var html = '';
    
    $.each(main_selected, function( index, value ) {
        $.each(all_cat, function( i, v ) {
            if(value == v.id){
                html +=  '<optgroup label="'+v.name+'">';
            }
        });
        $.each(all_cat, function( i, v ) {
            if(value == v.parent_id){
                html +=  '<option value="'+v.id+'">'+v.name+'</option>';
            }
        });
        html +='</optgroup>';
       
   });
   
    $('#exam_sub_type_element_multiple').empty();
     $('#exam_sub_type_element_multiple').append($.parseHTML(html));
    $('#exam_sub_type_element_multiple').selectpicker('refresh');
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.css" rel="stylesheet"/>

<div class="form-group col-md-3">
         <label class="bold" >Exam Type</label>
         <select  class="exam_type_element_multiple"  name="exam_type_element" data-live-search="true" multiple data-style="btn-info" data-selected-text-format="count">
               <option value="1">Bank</option>
               <option value="3">Railways</option>
         </select>
</div> 

<div class="form-group col-md-3 ">
           <label class="bold" >Sub Exam Type</label>
           <select  id="exam_sub_type_element_multiple"  name="exam_sub_type_element" data-live-search="true" multiple data-style="btn-warning" data-selected-text-format="count">
           
           </select>
</div>