Javascript jQuery多选列表框,其中';无';选项取消选择所有其他选项

Javascript jQuery多选列表框,其中';无';选项取消选择所有其他选项,javascript,jquery,Javascript,Jquery,在这里拉小提琴: 我有一个“无”的多选列表框,具有以下要求: 选择“无”包括选择中的任何位置=>仅包含“无” 已选中(其他任何选项均已关闭) 取消选择任何其他项目 在按住Ctrl键的同时单击,如果未选择任何其他选项,将自动 选择“无” 这是通过jQuery的Change函数实现的。我的问题: 1) 首先,对于#2(完全按住Ctrl键并单击取消选择):流不会进入$(“#列表框”).change(function())中。您可以看到这一点,因为如果选择“A”,然后按住Ctrl键并单击取消选择,则不会

在这里拉小提琴:

我有一个“无”的多选列表框,具有以下要求:

  • 选择“无”包括选择中的任何位置=>仅包含“无” 已选中(其他任何选项均已关闭)
  • 取消选择任何其他项目 在按住Ctrl键的同时单击,如果未选择任何其他选项,将自动 选择“无”
  • 这是通过jQuery的Change函数实现的。我的问题:

    1) 首先,对于#2(完全按住Ctrl键并单击取消选择):流不会进入
    $(“#列表框”).change(function()
    )中。您可以看到这一点,因为如果选择“A”,然后按住Ctrl键并单击取消选择,则不会显示函数顶部的警报

    2) 对于#1,如果选择的任何位置都包含“None”(值“”),我将创建一个空白数组,将“”推到该数组上,并将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;
            }
         });
    
       }
    
    
    });
    

    如果我理解正确的话,像下面这样

    $( "#listbox" ).change(function() {   
       var arr=  $(this).val();
       if (arr == null || arr.length === 0 || (arr.length > 1 && arr[0] === ''))
            $(this).val(['']);
    });
    
    只要未选择任何值或选择多个值(包括“无”值),即可简单地设置选择


    如果我正确理解了意图,下面是什么

    $( "#listbox" ).change(function() {   
       var arr=  $(this).val();
       if (arr == null || arr.length === 0 || (arr.length > 1 && arr[0] === ''))
            $(this).val(['']);
    });
    
    只要未选择任何值或选择多个值(包括“无”值),即可简单地设置选择

    嗨,检查我上面的代码,这是我的尝试

    您好,请检查我上面的代码,这是我的try(代表问题作者发布)

    现在问题解决了,最后一把小提琴在这里:

    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;
            }
         });
    
       }
    
    
    });
    
    (代表问题作者张贴)

    现在问题解决了,最后一把小提琴在这里:

    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;
            }
         });
    
       }
    
    
    });
    

    这只是一个小问题,与您的问题无关,但对我来说,选择“全部”意味着所有选项都应该被选择,如果选择“全部”视觉上选择“无”,我会感到困惑。更重要的是,如果取消选择所有选项,然后自动选择“全部”,感觉您描述的UI是违反直觉的。是的,我现在将其重命名。在您取消选择的代码中,看起来像
    noneOnly
    实际上是一个对象:
    {}
    。如果您将其更改为
    []
    ,取消选择应该会更好。非常感谢Andrew Myers,取消选择单个元素如何?只是一个小问题,与您的问题无关,但对我来说,选择“全部”意味着所有选项都应该被选择,如果选择“全部”则我会感到困惑,如果选择“全部”则视觉上选择“无”更重要的是,如果取消选择所有选项,然后自动选择“全部”,感觉您描述的UI是违反直觉的。是的,我现在将重命名它。看起来在您取消选择的代码中,
    noneOnly
    实际上是一个对象:
    {}
    。如果您将其更改为
    []
    ,取消选择应该会更好。非常感谢Andrew Myers,取消选择单个元素如何?