Select2 多选空白选项始终选中

Posted

技术标签:

【中文标题】Select2 多选空白选项始终选中【英文标题】:Select2 multi select blank option always selected 【发布时间】:2018-10-01 06:32:34 【问题描述】:

我使用 select2 进行多选,当我第一次选择时,任何选项,空白选项中的空值总是被选中。 如果我在加载时不使用占位符第一个选项,则会出现另一个问题。

这是我的 html 代码(包括一些 php):

<select class="form-control select2-multiple" name="category_id">
        <option></option>
        @foreach($instrument_category as $key=>$value)
            <option value=" $value "> $value </option>
        @endforeach
</select>

这是我的 jquery:

$(".select2-multiple").select2(
    'placeholder' : "Select Category",
    'multiple' : true,
    'defaultView': 'dropdown'
);

还有一个问题:第一次选择时会选择空白值。

给出的截图。

【问题讨论】:

在 select2 Docs 中说:“对于多选,您必须 not 有一个空的 如果我删除空选项,它会选择第一个选项,并且不会显示占位符。 【参考方案1】:

我遇到了完全相同的问题。要解决它: - 将多个属性添加到您的选择中(multiple="multiple") - 删除空选项标签

就我而言,我动态创建下拉菜单。所以我写了这段代码来修复它。

            $('#' + selectorId).attr('multiple', 'multiple');
            $("#" + selectorId + " option")[0].remove();

            $("#" + selectorId).select2(
                multiple: true,
                width: '100%',
                placeholder: "-- Select --"
            );

【讨论】:

【参考方案2】:

正如 Select2 文档 https://select2.org/placeholders 中所述:

对于多选,你不能有一个空元素

这导致浏览器默认选择“select”的第一个选项的问题,因此作为一种解决方法,有一种对我有用的hacky方式

要么使用这个:

$your_select_element.select2(
    multiple: true,
    placeholder: "Select whatever..."
);
// set the value to null or empty string '', then trigger (change) event
$your_select_element.val(null).trigger("change");

或者这个:

// the initial call of select2
$your_select_element.select2(
    multiple: true,
    placeholder: "Select whatever..."
);
$your_select_element.val(null);
$('.select2.select2-container').remove();
//re-call select2 on your element 
$your_select_element.select2(
    multiple: true,
    placeholder: "Select whatever..."
);

不费吹灰之力,第一种方法就是要走的路;)希望这对某人有所帮助

【讨论】:

以上是关于Select2 多选空白选项始终选中的主要内容,如果未能解决你的问题,请参考以下文章

如何使select2插件下拉框多选并获取选中的值

如何从select2多选中的选项列表中删除选定的选项并按选择的顺序显示选定的选项

如何使select2插件下拉框多选并获取选中的值

试图停止 Select2 多选选项删除的事件传播

select2 或 selected:如何扩展功能

select2 多选不起作用