【问题标题】:My dropdown list using bootstrap multiselect not populating我使用引导多选的下拉列表未填充
【发布时间】:2019-03-07 06:18:53
【问题描述】:

我正在尝试使用引导 javascript 和 css 文件创建一个多选下拉列表。不幸的是,我动态创建的一组选项(使用 AJAX)似乎没有填充列表。

我知道它一定与多选功能有关,因为当我将其设置为单选下拉菜单时,它工作得很好。

不知道是不是和这个函数的调用时间有关。当文档准备好时,不会调用列表,而是在 ajax 调用成功后调用。

代码如下:

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"}]--->

任何指导将不胜感激。我尝试了类似帖子中建议的各种解决方案,但没有运气。

【问题讨论】:

  • 能否把你在ajax成功中得到的值加进去:console.log(data)?
  • 这是我得到的(前两个): 0:call_sign:“KRBC-TV”设施_id:“306”运营商:“Nexstar Media Group Inc”所有者:“Mission Broadcasting Inc”primary_programming : "NBC" proto: 对象 1: call_sign: "KTAB-TV" facility_id: "59988" 运营商: "Nexstar Media Group Inc" 所有者: "Nexstar Media Group Inc" primary_programming: "CBS" proto: Object " 正如我所说,我能够成功填充单个下拉列表,因此可能与多选的工作方式有关。
  • 请字符串化:console.log(JSON.stringify(data));
  • 添加到原始问题的 json 响应

标签: javascript jquery ajax bootstrap-multiselect


【解决方案1】:

在您的 Participants 函数中,您有一个 ajax 调用。因为这是一个异步调用,您需要在成功片段中移动销毁并创建 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(){
         }
     });
 }

sn-p(按钮模拟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>

【讨论】:

  • 非常感谢您花时间回复。不幸的是,即使将两条多选线插入建议的位置,它仍然无法正常工作。奇怪的是,我复制了您的示例代码(使用下面的按钮),即使这样也不起作用....即使我在此页面上运行 sn-p 时效果很好。有什么想法吗?
  • 有趣的是,我的空白下拉列表的呈现方式与您的不同。它显示为一个空白框,并且没有出现“未选择”一词。它是否与我可能在服务器上加载的其他引导文件有关?
  • 看看我在 sn-p 中使用的库
  • 想通了。首先,在您的代码中,我需要将调用按钮的 javascript 移动到按钮本身下方。在我的代码中,在进行原始更改(解决了我最初的问题)之后,我还必须包含 popper 库并将其加载到 bootstrap.min.js 之前。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多