清除 Select2 的所有列表项而不是选中的

Posted

技术标签:

【中文标题】清除 Select2 的所有列表项而不是选中的【英文标题】:Clear all of the list items of Select2 rather than the selected 【发布时间】:2017-03-27 18:55:26 【问题描述】:

我有一个级联 Select2 ddl,当我选择主 ddl 时,我会毫无问题地填充 Detail ddl。另一方面,当我在 master 上选择另一个项目然后单击详细信息时,第一次详细信息 ddl 仅在一毫秒内列出以前的项目。因此,当主 ddl 的选定索引发生更改时,我需要清除除选定项之外的所有列表项。可能吗?我尝试了以下所有解决方法,但它们只清除所选项目。有什么想法吗?

$('#ProjectId').select2('data', null);
$('#ProjectId').select2('data',  id: null, text: null )
$('#ProjectId').empty();
$('#ProjectId').val(null).trigger("change");
$("#ProjectId").remove();
$('#ProjectId').val('').trigger('change');


@html.DropDownListFor(m => m.ProjectId, Enumerable.Empty<SelectListItem>(), "Select")


$(document).ready(function () 

    var issueType = $("#ProjectId");

    issueType.select2(
        allowClear: true,
        ajax: 
            url: '/Controller/GetProjects',
            dataType: 'json',
            delay: 250,
            data: function (params) 
                return 
                    query: params.term, //search term
                    page: params.page,
                    id: selectedMasterId
                ;
            ,
            processResults: function (data, page) 
                var newData = [];
                $.each(data, function (index, item) 
                    newData.push(
                        id: item.Id,
                        text: item.Description
                    );
                );
                return  results: newData ;
            ,
            cache: true
        ,
        escapeMarkup: function (markup)  return markup; , // let our custom formatter work
    ); 

);


$('#MasterId').change(function () 

    selectedMasterId = $(this).val();

        $('#ProjectId').select2('val', '');
        $('#ProjectId').select2('data', null);
    
);

【问题讨论】:

@AniketSahrawat 已发布,在此先感谢... select2 的哪个版本? (显然 v4 存在一些问题) 看看Sruit A.Suk 的回答here 现在没时间 - 稍后再看。 试试$('#ProjectId').empty().trigger('change'); 【参考方案1】:
$('#id').empty().trigger("change");

其中 '#id' 是您的 select2 元素的 jQuery 选择器。

【讨论】:

【参考方案2】:

在选择元素上把onchange="removeOthers(this)"在js代码中写这个函数:

function removeOthers(that)
    $('option', that).not(':eq(0), :selected').remove();
    //now refresh your select2

【讨论】:

我不是downvoter,而是为您的帮助投票+。另一方面,似乎没有显示事件描述的答案。你能更新它以获得完整的答案吗?

以上是关于清除 Select2 的所有列表项而不是选中的的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery Select2 清除下拉列表

Select2:如何使列表不包含在下拉列表和多选中

Flutter Provider-重建列表项而不是列表视图

从 JSON 数组拼接或删除元素列表,仅删除偶数项而不是匹配项

Django save request.POST to JSONField 从列表中选择最后一项而不是保存列表

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