jquery - 使用 select2 的可选 optgroup

标签 jquery html jquery-select2

我已经使用 select2 从下拉列表中选择多个选项,但是 select2 是否可以选择完整的 optgroup?我想要的是当用户选择选项组时,应该选择所有子选项。我想使用 jQuery Select2 来做到这一点。我怎么能这样做?

最佳答案

如果您使用隐藏的输入元素而不是选择元素支持 Select2,这是可能的。

要使组选项可选择,您必须给它一个“id”,但看起来它可以是一个空字符串。然后,您可以使用“select2-selecting”事件来阻止选择组选项,而是选择其子选项。

此外,可以提供一个query函数来防止组选项在其所有子选项都被选中后出现在列表中。

如果您有这样定义的选项:

var FRUIT_GROUPS = [
    {
        id: '',
        text: 'Citrus',
        children: [
            { id: 'c1', text: 'Grapefruit' },
            { id: 'c2', text: 'Orange' },
            { id: 'c3', text: 'Lemon' },
            { id: 'c4', text: 'Lime' }
        ]
    },
    {
        id: '',
        text: 'Other',
        children: [
            { id: 'o1', text: 'Apple' },
            { id: 'o2', text: 'Mango' },
            { id: 'o3', text: 'Banana' }
        ]
    }
];

您可以像这样检测您的 Select2:

$('#fruitSelect').select2({
    multiple: true,
    placeholder: "Select fruits...",
    data: FRUIT_GROUPS,
    query: function(options) {
        var selectedIds = options.element.select2('val');
        var selectableGroups = $.map(this.data, function(group) {
            var areChildrenAllSelected = true;
            $.each(group.children, function(i, child) {
                if (selectedIds.indexOf(child.id) < 0) {
                    areChildrenAllSelected = false;
                    return false; // Short-circuit $.each()
                }
            });
            return !areChildrenAllSelected ? group : null;
        });
        options.callback({ results: selectableGroups });
    }
}).on('select2-selecting', function(e) {
    var $select = $(this);
    if (e.val == '') { // Assume only groups have an empty id
        e.preventDefault();
        $select.select2('data', $select.select2('data').concat(e.choice.children));
        $select.select2('close');
    }
});

jsfiddle

这是一个jsfiddle没有 query 函数,当所有子选项都被选中时,组选项仍然出现。

关于jquery - 使用 select2 的可选 optgroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26964909/

相关文章:

vue.js - 在 vueJS 中,如何在 v-select v2.5.1 中绑定(bind)所选选项的 Id

ruby-on-rails - 将 Select 2 与 form_for rails 一起使用

javascript - 如何在html表格中创建多维数组

javascript - 给一个变量一个唯一的名字javascript/jquery

jQuery:为幻灯片创建自动计时器 - 单击取消

javascript - innerHTML 剥离类?

javascript - 使用 html5 通过 ajax 和 jquery 上传文件

javascript - 在 Backbone View 中使用函数

html - Css改变无序列表的样式?

jquery - 自定义select2多选