简体   繁体   English

我的使用引导多重选择的下拉列表没有填充

[英]My dropdown list using bootstrap multiselect not populating

I am trying to create a multiselect dropdown list using the bootstrap javascript and css files. 我正在尝试使用引导javascript和CSS文件创建多选下拉列表。 Unfortunately, my dynamically created set of options (using AJAX) does not appear to be populating the list. 不幸的是,我动态创建的一组选项(使用AJAX)似乎没有填充列表。

I know it must be related to the multiselect feature because when I set it up as a single-select dropdown, it works great. 我知道它必须与多选功能有关,因为当我将其设置为单选下拉列表时,它的效果很好。

I wonder if it is related to when this function is called. 我想知道它是否与何时调用此函数有关。 The list is not called when the document is ready, but rather after the ajax call succeeds. 当文档准备就绪时,不调用列表,而是在ajax调用成功之后调用。

Here is the code: 这是代码:

 function Participants(sid){ console.log(sid); $('#participants').empty() $('#participants').append("<option>Loading......</option>"); $.ajax({ method:"POST", url:"participants_dropdown.php?sid="+sid, contentType:"application/json; charset=utf-8", dataType:"json", success: function(data){ console.log('success') $('#participants').empty(); $('#participants').append("<option value='0'>---Select Participants---</option>"); $.each(data, function(i, item){ $('#participants').append('<option value="'+data[i].facility_id+'">Call-Sign: '+data[i].call_sign+' - Operator: '+data[i].operator+' - Primary Programming: '+data[i].primary_programming+'</option>'); }); }, complete: function(){ } }); $('#participants').multiselect('destroy'); $('#participants').multiselect(); } 
 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/js/bootstrap-multiselect.js"></script> <div class="col-md-4"> <h3><span>2) Select Market Participants</span></h3> <select id="participants" multiple class="form-control"> </select> </div> <!---sample JSON [{"operator":"Nexstar Media Group Inc","owner":"Mission Broadcasting Inc","call_sign":"KRBC-TV","facility_id":"306","primary_programming":"NBC"},{"operator":"Nexstar Media Group Inc","owner":"Nexstar Media Group Inc","call_sign":"KTAB-TV","facility_id":"59988","primary_programming":"CBS"},{"operator":"Prime Time Christian Broadcasting Incorporated","owner":"Prime Time Christian Broadcasting Incorporated","call_sign":"KPCB-DT","facility_id":"77452","primary_programming":"REL"},{"operator":"Sinclair Broadcast Group Inc","owner":"Sinclair Broadcast Group Inc","call_sign":"KTXS-TV","facility_id":"308","primary_programming":"ABC"},{"operator":"TEGNA Inc","owner":"TEGNA Inc","call_sign":"KXVA","facility_id":"62293","primary_programming":"FOX"}]---> 

Any guidance would be appreciated. 任何指导将不胜感激。 I have tried various solutions suggested in similar posts but no luck. 我尝试了类似帖子中建议的各种解决方案,但没有运气。

In your Participants function you have an ajax call. 在您的参与者函数中,您有一个ajax调用。 Because this is an asynchronous call you need to move the destroy and create multiselect inside the success fragment: 因为这是一个异步调用,所以您需要在成功片段内移动destroy并创建multiselect

function Participants(sid){
     console.log(sid);
     $('#participants').empty()
     $('#participants').append("<option>Loading......</option>");
     $.ajax({
         method:"POST",
         url:"participants_dropdown.php?sid="+sid,
         contentType:"application/json; charset=utf-8",
         dataType:"json",
         success: function(data){
             console.log('success')
             $('#participants').multiselect('destroy');
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HERE
             $('#participants').empty();
             $('#participants').append("<option value='0'>---Select Participants---</option>");
             $.each(data, function(i, item){
                 $('#participants').append('<option value="'+data[i].facility_id+'">Call-Sign: '+data[i].call_sign+' - Operator: '+data[i].operator+' - Primary Programming: '+data[i].primary_programming+'</option>');
          });
             $('#participants').multiselect();
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HERE
         },
         complete: function(){
         }
     });
 }

The snippet (the button simulates the ajax call): 代码段(该按钮模拟ajax调用):

 $('#participants').empty() $('#participants').append("<option>Loading......</option>"); $('#participants').multiselect(); $('#btn').on('click', function(e) { var data = [{"operator":"Nexstar Media Group Inc","owner":"Mission Broadcasting Inc","call_sign":"KRBC-TV","facility_id":"306","primary_programming":"NBC"},{"operator":"Nexstar Media Group Inc","owner":"Nexstar Media Group Inc","call_sign":"KTAB-TV","facility_id":"59988","primary_programming":"CBS"},{"operator":"Prime Time Christian Broadcasting Incorporated","owner":"Prime Time Christian Broadcasting Incorporated","call_sign":"KPCB-DT","facility_id":"77452","primary_programming":"REL"},{"operator":"Sinclair Broadcast Group Inc","owner":"Sinclair Broadcast Group Inc","call_sign":"KTXS-TV","facility_id":"308","primary_programming":"ABC"},{"operator":"TEGNA Inc","owner":"TEGNA Inc","call_sign":"KXVA","facility_id":"62293","primary_programming":"FOX"}]; $('#participants').multiselect('destroy'); $('#participants').empty(); $('#participants').append("<option value='0'>---Select Participants---</option>"); $.each(data, function(i, item){ $('#participants').append('<option value="'+data[i].facility_id+'">Call-Sign: '+data[i].call_sign+' - Operator: '+data[i].operator+' - Primary Programming: '+data[i].primary_programming+'</option>'); }); $('#participants').multiselect(); }) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/js/bootstrap-multiselect.js"></script> <div class="col-md-4"> <h3><span>2) Select Market Participants</span></h3> <select id="participants" multiple class="form-control"> </select> <button id="btn" class="btn btn-primary">Click Me</button> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM