如何让jquery select2动态禁用一个选项?

问题描述 投票:0回答:2

我有一些多选,我使用 jquery select2。当在一个多选中选择此选项时,我想禁用其他多选中的一个选项。 我写了这段代码,但它确实有效。

$("select.multiselect").on("change", function(e) {
    if(e.added){
        for(var i=0;i<this.options.length;i++){
            var vals = $(this).select2("val");
            for(var j=0;j<vals.length;j++){
                if(this.options[i].value===vals[j]){
                    this.options[i].selected=true;
                }
            }
        };
    }

    if(e.removed){
        for(var i=0;i<this.options.length;i++){
            if(this.options[i].value===e.removed.id){
                this.options[i].selected=false;
            }
        };
    }
});

如何做?

javascript jquery jquery-select2
2个回答
7
投票

它比我想象的要复杂,但这是我想到的:

$('select.multiselect').on('change', function(e) {

    // the selected values
    var vals = $(this).select2("val");

    // selects contains all the OTHER select forms
    var selects = $('select').not('#'+$(this).attr('id'));

    // loop trough all the selects
    for (var i = 0; i < selects.length; i++) {
        //re-enable all options before
        $(selects[i]).find('option').removeAttr('disabled');
        // loop trough all the values
        for (var j = 0; j < vals.length; j++) {
            // disabled attribute
            $(selects[i]).find('option[value='+vals[j]+']').attr('disabled', 'disabled');
        }
    }
});

如果您想查看实际结果,这里有一个小提琴

确保所有

select
元素都有唯一的
id


0
投票

您只需找到

<option
> 元素并添加“disabled”属性即可动态禁用任何选项,但这不会更新 select2 元素

在旧版本的 select2 中,您只需

.trigger('change')
之后,它就会更新 select2 元素。

在最近的版本中似乎不再起作用,并且 您必须使用

$(selectId).select2()

重新初始化整个选择
© www.soinside.com 2019 - 2024. All rights reserved.