jQuery Multi-Select Listbox其中'无'选项取消选择所有其他人

时间:2016-03-01 15:49:46

标签: javascript jquery

在这里小提琴:https://jsfiddle.net/q0o11c5e/17/

我有一个多选列表框,其中包含'无'满足以下要求:

  1. 选择'无'在selection =>中包含任何地方只有'无' 被选中(其他任何东西都被关闭)
  2. 取消选择任何其他项目     使用Ctrl +单击,如果没有其他选择,将自动     选择'无'。
  3. 这是通过jQuery的Change函数实现的。我的问题:

    1)首先,对于#2(完全Ctrl +单击取消选择):流程根本不会进入$( "#listbox" ).change(function()。您可以看到,因为如果您选择' A '然后按住Ctrl +单击取消选择它,功能顶部的警报不会显示。

    2)对于#1,如果选择包括'无' (值'')在任何地方,我创建一个空白数组,推送''在它上面,并将Listbox Val设置为它(并立即中断),但这不起作用。

    $( "#listbox" ).change(function() {   
    
       alert('SelArray: ' + $('#listbox').val() +  '   Length: ' + $('#listbox').val().length);
    
       // If no selection, automatically select 'None'
       if ($('#listbox').val().length == 0) {
            alert('Nothing selected');
       }
       else
       {
         // If new selection includes empty ('None'), deselect any other active selections
         $.each($('#listbox').val(), function (index, value) {
            if (value == '') {
              alert('None selected, clearing anything else..');
              var noneOnly = {};
              noneOnly.push('');
              $('#listbox').val(noneOnly);
              return false;
            }
         });
    
       }
    
    
    });
    

3 个答案:

答案 0 :(得分:1)

如果我的意图正确,如下所示?

$( "#listbox" ).change(function() {   
   var arr=  $(this).val();
   if (arr == null || arr.length === 0 || (arr.length > 1 && arr[0] === ''))
        $(this).val(['']);
});

这只是在没有选择任何值或选择多个值时设置选择,包括' none'

Fiddle

答案 1 :(得分:1)

$("#listbox").on("input change", function() {
    if($(this).find("option[value='']:selected").length!=0 || $(this).find("option:selected").length==0) {
    $(this).find("option").attr("selected", false);
    $(this).find("option[value='']").attr("selected", true);
    return false;
  }
});

嗨,查看我上面的代码,这是我的尝试https://jsfiddle.net/q0o11c5e/22/

答案 2 :(得分:0)

(代表问题作者发布)

现在已解决,最后在这里提琴:https://jsfiddle.net/q0o11c5e/23/

JS代码:

$( "#listbox" ).change(function() {   

   var arr=  $(this).val();
   if (arr == null || arr.length === 0 || (arr.length > 1 && arr[0] === '')) {
        $(this).val(['']);
   }   
   else
   {
     // If new selection includes empty ('None'), deselect any other active selections
     $.each(arr, function (index, value) {
        if (value == '') {
          var noneOnly = [];
          noneOnly.push('');
          $('#listbox').val(noneOnly);
          return false;
        }
     });

   }


});