【问题标题】:select2 v4 programmatically remove a tagselect2 v4 以编程方式删除标签
【发布时间】:2017-06-28 10:52:41
【问题描述】:

我想删除之前选择的 select2 多选 <li> 元素,但我有一个问题 - 小提琴: https://jsfiddle.net/64nxhLc1/44/

我在做的基本上是这样的:

   $("button").click(function() {
      $("li-i-want-removed").remove();
    });

这确实删除了内部标记,但是下次我选择其他内容时,我会自动填充上一个。

a被删除,然后选择b时,右后面弹出弹出。 我想以某种方式触发select2:unselect 事件,但我不知道如何...

【问题讨论】:

    标签: javascript jquery html jquery-select2


    【解决方案1】:

    这应该可以,删除 li 生成的 select2 并将 selected 设置为 false 到选择标签:

    $(function () {
        $('#myselect').select2({
            placeholder: "select option",
            tags:true
        });
    });
    
    $("button").click(function() {
       // remove the li node at first 
       $("#myselect").next(".select2").find("li[title='A']").remove();
       // set the select with value A to unselected
       $("#myselect").find("option[value='A']").prop("selected",false);
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js"></script>
    <button>
    remove A
    </button>
    
    <div style="margin:30px; height:400px;">
    
    
    <select id="myselect" multiple = "multiple" style="min-width:300px;">
      <option></option>
      <option value='A'>A</option>
      <option value='B'>B</option>
      <option value='C'>C</option>
    </select>
    
    </div>

    您也可以使用更改事件,因此先取消选择值,然后触发change,它会自动从选择中删除 li:

    参见下面的 sn-p :

    $(function () {
        $('#myselect').select2({
            placeholder: "select option",
            tags:true
        });
    });
    
    $("button").click(function() {
       // set the select with value A to unselected
       $("#myselect").find("option[value='A']").prop("selected",false);
       $("#myselect").trigger("change");
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js"></script>
    <button>
    remove A
    </button>
    
    <div style="margin:30px; height:400px;">
    
    
    <select id="myselect" multiple = "multiple" style="min-width:300px;">
      <option></option>
      <option value='A'>A</option>
      <option value='B'>B</option>
      <option value='C'>C</option>
    </select>
    
    </div>

    【讨论】:

    • 这应该可以解决您的问题
    • 这是一个非常好的解决方案,它完全有意义,只是测试它并且它工作 - 这是完美的。这可能有点牵强,但您知道我是否可以通过单击按钮触发此“select2:unselect”事件?我想基本上复制单击标签上的关闭元素的行为。您的解决方案非常有用,但就像头脑训练一样。 :x
    • 太棒了:D,请注意 select2:unselect 是在取消选择值注释后触发的事件,因此您不能使用它来删除选定的项目,但您可以使用更改事件作​​为在我的第二个 sn-p 中描述 :) 查看更新的答案
    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2022-12-10
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多