我有一个允许多个选择的select2元素。选项之一是值为0的“无”,选择该选项时应清除以前选择的任何选项。我遇到的问题是在后端更新数据时,显示给用户的选项仍然保留。例如,我选择了苹果,但没有选择。苹果保持显示状态,但是已从values数组中删除,并且苹果再次显示为下拉菜单中的可用选项。尽管数据的完整性很好,但对用户而言,它似乎让苹果选择了两次或更多次。 (希望如此)

如果我从此功能之外在props_select上触发了更改事件,则该事件将按预期运行,并且将更新用户视图。好像Select2在仍然执行change函数的同时不允许更新视图。

我正在使用Select2 3.5,我知道它已经过时了,但超出了我的控制范围。要更新到较新版本,需要安全批准,然后进行数月的回归测试(很糟糕)。

$('#props_select').change(function(e){

    if( typeof e.added != 'undefined' && e.added.id == '0'){
        $('#props_select').val([0]).trigger('change');

    }
});



<div class="select-filter">
    <label for="props_select">Equipment contains:</label>
    <select id="props_select" name="props_select" class="form-control
        form-control-lg" multiple="multiple">
        <cfloop query="myquery">
            // build options here
        </cfloop>

        <option value="0">None</option>
    </select>
</div>

最佳答案

我认为您正在使用新的Select2文档。应该:

$(this).select2("val", []);


演示:https://jsfiddle.net/zbwh7qdr/1/

09-25 17:38
查看更多