【问题标题】:Use multiselect with dynamically generated select将多选与动态生成的选择一起使用
【发布时间】:2020-02-04 17:44:21
【问题描述】:

我正在尝试使用在这里找到的多选插件:

How to use Checkbox inside Select Option

上面的问题是针对带有硬编码<options><select>

我正在使用的<select> 使用带有此功能的jQuery 和PHP 生成<options>

function initializeSelect($select, uri, adapt){     
$.getJSON( uri, function( data ) {
    $select.empty().append($('<option>'));      
    $.each(data, function(index, item) {
        var model = adapt(item);
        var $option = $('<option>');
        $option.get(0).selected = model.selected;
        $option.attr('value', model.value)
            .text(model.text)
            .appendTo($select);                     
    });
  });
};

initializeSelect($('#salesrep'), 'process/getSalesReps.php', function (item) { 
  return {
    value: item.final_sales_rep,
    text: item.final_sales_rep
  }
}); 

我在不同的项目中多次使用上述函数,因为它成功地创建了 PHP 进程带来的所有选项。除非要求,否则我不会显示该过程的代码。只要知道我确实在检索一组名称并将它们显示在下拉列表中。

上面函数的正下方是我调用多选功能的地方:

$('select[multiple]').multiselect();

$('#salesrep').multiselect({
  columns: 1,
  placeholder: 'Select Reps'
});

选择的 HTML 如下:

<select class="form-control" name="salesrep[]" multiple id="salesrep"></select>

使用上述所有方法,输出如下所示:

检查元素后,我可以看到所有销售代表的姓名。这告诉我 initializeSelect 函数工作正常。

因此我认为这个问题一定与多选有关。

【问题讨论】:

  • 如果在后端调用之后将multiselect() 函数放入getJSON 会发生什么?
  • 使用 $('#salesrep').multiselect('refresh');在你追加后
  • @FelippeDuarte 我什至不确定如何或在何处应用 getJSON 中的多选。
  • 我希望您需要在填充选项列表后调用multiselect函数。
  • Ajax 默认调用 ara async,因此,当您调用 multiselect 时,&lt;select&gt; 还没有填充选项。

标签: javascript php jquery multi-select


【解决方案1】:

Ajax 调用是异步的。您在 ajax 调用有时间完成之前调用 multiselect(),因此在调用 multiselect() 函数时选项列表仍然为空。

$('#salesrep').multiselect({.. 位移动到getJSON 方法内部,或者在填充选项列表后调用多选刷新函数,就像我在这里所做的那样。 (未经测试。)

function initializeSelect($select, uri, adapt){     
$.getJSON( uri, function( data ) {
    $select.empty().append($('<option>'));      
    $.each(data, function(index, item) {
        var model = adapt(item);
        var $option = $('<option>');
        $option.get(0).selected = model.selected;
        $option.attr('value', model.value)
            .text(model.text)
            .appendTo($select);                     
    });
    //now that the ajax has completed you can refresh the multiselect:
    $select.multiselect('refresh');
  });
};

initializeSelect($('#salesrep'), 'process/getSalesReps.php', function (item) { 
  return {
    value: item.final_sales_rep,
    text: item.final_sales_rep
  }
});

$('select[multiple]').multiselect();

$('#salesrep').multiselect({
  columns: 1,
  placeholder: 'Select Reps'
});

【讨论】:

  • 是的。我将两个多选调用都移到了 getJSON 中(如您所建议的那样),这解决了我的问题。谢谢你,先生。
猜你喜欢
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
相关资源
最近更新 更多