如何从Bootstrap Multi-Select返回文本值

时间:2014-09-22 13:08:20

标签: jquery twitter-bootstrap bootstrap-select

我正在使用bootstrap select进行多次启用的下拉列表。 当按下按钮时,我正在构建一个要在AJAX请求中使用的变量。

它适用于返回值(在本例中基本上是ID),因为它返回一个值数组,我可以使用循环来构建JSON。但是我还需要发送文本值,但还没有能够使这个工作。

   $('#sendButton').click(function() {
    var modal = $('#modalPopup');
    var modalID = modal.data('value');
    var selectedOptionValue = $('#multiSelectBox').val();
    var selectedOptionName = $('#multiSelectBox').text();
    var sendRequest = {
        'modalNo': modalID,
        'products': []
    };
    for (var i = 0; i < selectedOptionValue.length; i++) {
        sendRequest.products.push({
            'productId': selectedOptionValue[i],
            'productName': selectedOptionName
        });
    }
   });

我在构建请求时尝试了另一个循环来执行selectedOptionName[j]但没有运气,我最终得到了我的下拉列表中的所有文本值。尝试使用:

var selectedOptionName = $('#multiSelectBox:selected').text();

但这不会返回任何东西。有什么想法吗?

用于下拉列表的HTML:

<select class="selectpicker" multiple id="multiSelectBox" title="Select Product(s)"></select>

填充下拉列表的代码:

var html = '';
for (var i = 0; i < data.products.length; i++){
        html += '<option value ="' + data.products[i].productId+ '">' + data.products[i].productName+ '</option>'
    }
    $('#multiSelectBox').html(html);    
    $('.selectpicker').selectpicker('refresh');

2 个答案:

答案 0 :(得分:3)

正确的语法是

  

$(“#multiSelectBox option:selected”)。text()

但这将为您提供所有选定文本的字符串。所以你需要在循环中按值找到文本。我没有在这里检查语法,可能有拼写错误。

for (var i = 0; i < selectedOptionValue.length; i++) {

var val = selectedOptionValue[i]; 
var txt = $("#multiSelectBox option[value='"+val+"']").text();

        sendRequest.products.push({
            'productId': val ,
            'productName': txt 
        });
    }

答案 1 :(得分:0)

选择ALL WITH FILTER

<h1 class="monthofyear">monthofyear: <span></span></h1>



  $(document).ready(function() { $('#monthofyear').multiselect({ includeSelectAllOption: true,
  onSelectAll: function(element, checked) {
    var selected = [];
    $('#monthofyear option:selected').each(function(index, brand) {
      selected.push([$(this).val()]);
    });
    $("h1.monthofyear span").text(selected);
  },
  enableCaseInsensitiveFiltering: true,
  enableFiltering: true,
  maxHeight: '300',
  buttonWidth: '235',
  onChange: function(element, checked) {
    var brands = $('#monthofyear option:selected');
    var selected = [];
    $(brands).each(function(index, brand) {
      selected.push([$(this).val()]);
    });
    $("h1.monthofyear span").text(selected);

  }
});});