根据所选值禁用select2选项

佩特沃斯尼克

我正在尝试执行与该提琴非常相似的操作,但是与其禁用与所选组不在同一组中的其他选择,我要禁用与所选组不在同一组中的所有选项...因此强制用户从同一组中选择另一个选项。

但是,即使我只是简单地从小提琴复制代码,也会给我一个错误:

https://jsfiddle.net/bindrid/hpkqxto6/

   <select multiple style="width: 300px">
      <option groupid="a" value="A_AK">Alaska</option>
      <option groupId="b" value="B_HI">Hawaii</option>
      <option groupid="c" value="C_CA">California</option>
      <option groupid="a" value="D_NV">Nevada</option>
      <option groupid="b" value="A_OR">Oregon</option>
      <option groupid="c" value="B_WA">Washington</option>
      <option groupid="a" value="C_AZ">Arizona</option>
      <option groupid="b" value="D_CO">Colorado</option>
      <option groupid="c" value="A_ID">Idaho</option>
      <option groupid="a" value="B_MT">Montana</option>
      <option groupid="b" value="C_NE">Nebraska</option>
      <option groupid="c" value="D_NM">New Mexico</option>
      <option groupid="a" value="A_ND">North Dakota</option>
      <option groupid="b" value="B_UT">Utah</option>
      <option groupid="c" value="C_WY">Wyoming</option>
    </select>
         $(function() {
       $('select').select2({
         allowClear: true,
         placeholder: "Pick a State"
       });
    
       //Select2 Event handler for selecting an item
       $('select').on("select2:selecting", function(evt, f, g) {
         disableSel2Group(evt, this, true);
       });
    
       // Select2 Event handler for unselecting an item
       $('select').on("select2:unselecting", function(evt) {
         disableSel2Group(evt, this, false);
       });
     });
    
    
     // At some point during the select2 instantation it created the 
     // data object it needs with the source select option.
     // This function, called by the events above to set the current status for the
     // group for which the selected option belongs.
     function disableSel2Group(evt, target, disabled) {
       // Found a note in the Select2 formums on how to get the item to be selected
    
       var selId = evt.params.args.data.id;
       var group = $("option[value='" + selId + "']").attr("groupid");
    
       var aaList = $("option", target);
       $.each(aaList, function(idx, item) {
         var data = $(item).data("data");
    
         var itemGroupId = $("option[value='" + data.id + "']").attr("groupid");
         if (itemGroupId == group && data.id != selId) {
           data.disabled = disabled;
         }
       })
     }

这样的想法是,当在select2下拉列表中选择一个选项时,它将禁用其他选项。但是,即使我简单地重新创建此代码,也会收到一条错误(无法读取未定义的属性“ id”),该错误在行上触发:

    var group = $("option[value='" + selId + "']").attr("groupid");

任何人都可以帮助解决该错误,然后帮助我禁用所有其他组的主要目的吗?谢谢。

斯瓦蒂

您可以使用evt.params.args.data.element它为您提供html选项标签,然后使用它可以获取groupid值并将其与所有选项attr进行比较(如果不是同样禁用了该选项)。

现在,不要unselecting使用它,unselect因为在选择框未选择任何值的情况下,您需要在此处启用所有选项。因此,在函数内部select2('data').length,如果0仅启用长度,则仅启用所有选项。

演示代码

$(function() {
  $('select').select2({
    allowClear: true,
    placeholder: "Pick a State"

  });

  $('select').on("select2:selecting", function(evt, f, g) {
    disableSel2Group(evt, this, true);
  });

  $('select').on("select2:unselect", function(evt) {
    disableSel2Group(undefined, undefined, false);
  });

})



function disableSel2Group(evt, target, disabled) {
  //check if disabled true
  if (disabled) {
    //get option
    var selId = evt.params.args.data.element;
    var group = $(selId).attr('groupid') //groupid 

    var aaList = $("option", target);
    $.each(aaList, function(idx, item) {
      var other_groups = $(item).attr("groupid"); //get option groupid
      var data = $(item).data("select2-id"); //get option selct2id
      //if not same
      if (group != other_groups) {
        $("select option[data-select2-id =" + data + "]").prop("disabled", true); //disable that option

      }
    })
  } else {
    var count = $('select').select2('data').length //checcking slected data count
    console.log(count)
    //if 0 
    if (count == 0) {
      $("select option").prop("disabled", false); //enable all options
    }
  }
}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css">

<script src="https://code.jquery.com/jquery-3.5.0.js"></script>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>

<select multiple style="width: 300px">

  <option groupid="a" value="A_AK">Alaska</option>

  <option groupid="b" value="B_HI">Hawaii</option>

  <option groupid="c" value="C_CA">California</option>

  <option groupid="a" value="D_NV">Nevada</option>

  <option groupid="b" value="A_OR">Oregon</option>

  <option groupid="c" value="B_WA">Washington</option>

  <option groupid="a" value="C_AZ">Arizona</option>

  <option groupid="b" value="D_CO">Colorado</option>

  <option groupid="c" value="A_ID">Idaho</option>

  <option groupid="a" value="B_MT">Montana</option>

  <option groupid="b" value="C_NE">Nebraska</option>

  <option groupid="c" value="D_NM">New Mexico</option>

  <option groupid="a" value="A_ND">North Dakota</option>

  <option groupid="b" value="B_UT">Utah</option>

  <option groupid="c" value="C_WY">Wyoming</option>

</select>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Select2:加载所选值

来自分类Dev

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

来自分类Dev

更改时从select2多选中删除所选选项。

来自分类Dev

Select2 off('change')。on('change'.....)无法更改所选选项

来自分类Dev

Select2 off('change'.....)无法更改所选选项

来自分类Dev

无法在Bootstrap的select2插件中设置所选值

来自分类Dev

使用jQuery和两个selects,select2会显示禁用的选项,其值比select1低?

来自分类Dev

根据选项的数据属性在select2中显示图像

来自分类Dev

根据对象类型值Vuetify v-select禁用选项

来自分类Dev

根据所选值启用/禁用按钮

来自分类Dev

jQuery select2将类添加到所选项目

来自分类Dev

更改状态时,Select2 AngularJS所选项目丢失

来自分类Dev

用户使用select2更改所选项目的字体颜色

来自分类Dev

Select2:如何为所选项目添加额外信息?

来自分类Dev

是否可以在Select2 MultiSelect中显示所选项目的替代文本?

来自分类Dev

Django 渲染:如何在 Select2 Jquery 插件中实例化所选项目

来自分类Dev

AngularJS根据所选选项过滤值

来自分类Dev

无法在select2 jquery中获取默认选项的值

来自分类Dev

单击下一行中的select2时如何防止select2清除所选值

来自分类Dev

替换select2选项?

来自分类Dev

Select2搜索选项

来自分类Dev

克隆 select2 选项

来自分类Dev

根据所选选项禁用复选框(jQuery)

来自分类Dev

Select2 AJAX所选值未出现在框内

来自分类Dev

angularjs select2所选值未显示在字段中

来自分类Dev

如何绑定到select2更改事件并获取所选值

来自分类Dev

是否可以在Select2上获得所选值数组的引用?

来自分类Dev

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

来自分类Dev

如何使用Select2和远程数据禁用某些选项

Related 相关文章

  1. 1

    Select2:加载所选值

  2. 2

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

  3. 3

    更改时从select2多选中删除所选选项。

  4. 4

    Select2 off('change')。on('change'.....)无法更改所选选项

  5. 5

    Select2 off('change'.....)无法更改所选选项

  6. 6

    无法在Bootstrap的select2插件中设置所选值

  7. 7

    使用jQuery和两个selects,select2会显示禁用的选项,其值比select1低?

  8. 8

    根据选项的数据属性在select2中显示图像

  9. 9

    根据对象类型值Vuetify v-select禁用选项

  10. 10

    根据所选值启用/禁用按钮

  11. 11

    jQuery select2将类添加到所选项目

  12. 12

    更改状态时,Select2 AngularJS所选项目丢失

  13. 13

    用户使用select2更改所选项目的字体颜色

  14. 14

    Select2:如何为所选项目添加额外信息?

  15. 15

    是否可以在Select2 MultiSelect中显示所选项目的替代文本?

  16. 16

    Django 渲染:如何在 Select2 Jquery 插件中实例化所选项目

  17. 17

    AngularJS根据所选选项过滤值

  18. 18

    无法在select2 jquery中获取默认选项的值

  19. 19

    单击下一行中的select2时如何防止select2清除所选值

  20. 20

    替换select2选项?

  21. 21

    Select2搜索选项

  22. 22

    克隆 select2 选项

  23. 23

    根据所选选项禁用复选框(jQuery)

  24. 24

    Select2 AJAX所选值未出现在框内

  25. 25

    angularjs select2所选值未显示在字段中

  26. 26

    如何绑定到select2更改事件并获取所选值

  27. 27

    是否可以在Select2上获得所选值数组的引用?

  28. 28

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

  29. 29

    如何使用Select2和远程数据禁用某些选项

热门标签

归档