从 select2 列表中删除旧的选定值

Posted

技术标签:

【中文标题】从 select2 列表中删除旧的选定值【英文标题】:Remove old selected value from select2 list 【发布时间】:2022-01-15 23:28:18 【问题描述】:

我有一个选择,其中一个选项被禁用(当用户单击表单的另一个字段时,它会动态禁用/启用,使用 jquery 添加“禁用”属性):

<select style="width:50%;" name="custom">
<option value="0" disabled>ND</option>
<option value="1">Alex Burn</option>
<option value="2">Tom Johnes</option>
<option value="3">Serhio Aguero</option>
<option value="4">Eugeny Petrosyan</option>
<option value="5">Mark Twen</option>
<option value="6">Jack Sparrow</option>
<option value="7">Luci Night</option>
<option value="8">Silvia Rodger</option>
<option value="9">Marko Roys</option>
<option value="10">Voldemar Fermer</option>
</select>

出于某种原因,我必须将此选择的第一个选项设为选中,并且我无法修改这部分代码:

$("[name='custom']").select2();
$("[name='custom']").val($("[name='custom'] option:first").val());
$("[name='custom']").select2("val", $("[name='custom'] option:first").val());

我不想在我的 select2 列表中看到禁用的选项,我使用了一些 css 来隐藏它:

.select2-results__option[aria-disabled="true"] 
        display: none;
    

它从 select2 列表中隐藏,但...仍显示为选定值。如何避免将其也显示为选定值?

这是一个小提琴https://jsfiddle.net/y1tsh8ka/4/

【问题讨论】:

【参考方案1】:

试试这个

$("[name='custom']").select2();
$("[name='custom']").val($("[name='custom'] option:first").val());
$("[name='custom']").select2("val", $("[name='custom'] option:not([disabled]):first").val());

不是选择第一个值,而是选择第一个未被禁用的值

【讨论】:

谢谢你,伙计,但它不适合我,因为这部分代码在选项再次被禁用/启用/禁用之前发生,依此类推 好的。因此,您希望在启用/禁用选项的事件中添加这行代码。所以我会首先检查所选值是否被禁用,如果是,则运行这行代码 应该是这样 if($('[name='custom']').find(":selected").prop('disabled')) $("[name= 'custom']").select2("val", $("[name='custom'] option:not([disabled]):first").val()); 更新了你修改的小提琴,看看它在我的特殊情况下不起作用:jsfiddle.net/jco4538z/1 哇,您在禁用选项的事件中推送这条修改后的行是对的。似乎这最后的小提琴正在工作:) jsfiddle.net/jco4538z/2

以上是关于从 select2 列表中删除旧的选定值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 select2() 下拉 Jquery 中禁用选定属性?

在与下拉列表分开的输入中显示 select2“药盒”

创建一个按钮以删除 select2 上的选定值

从下拉列表 Select2 中的多个值中获取选定值

如何在javascript变量中获取jquery select2选定值[重复]

在 C# 的 asp.net 下拉列表中的 select2 上设置多个选定值