在一定条件下取消选中多选框的选中项

Posted

技术标签:

【中文标题】在一定条件下取消选中多选框的选中项【英文标题】:deselect a selected item of a multi-select box under a certain condition 【发布时间】:2018-08-18 17:56:17 【问题描述】:

如果选择了另一个选项,我正在尝试弄清楚如何取消选择多选框的选定项目。在以下场景中,如果选择了任何其他选项(或所有其他选项),我只想取消选择选项“管理员”(默认值)。

简单地说:默认选择admin,如果用户选择'user'或者'editor'或者两者都选,admin应该取消选择。

目前,它不会取消选择。

    $('#groups').on('change', function () 
        var selected = $('#groups').find('option:selected').val();
        console.log('selected: ' + selected);
        // if anything other than admin is selected deselect admin
        if (selected !== 'admin') 
            $('#admin').prop('selected', false);
        
    );

html

<div class="col-md-3">
    <select class="form-control" id="groups" multiple>
        <option value="admin" selected="selected" id="admin">Admin Only</option>
        <option value="user">User</option>
        <option value="editor">Editor</option>
    </select>
</div>

【问题讨论】:

什么是组变量? Console.log 你选择的让看看他在检索什么 我的错误是我更改了代码,使其更适合堆栈。该变量刚刚引用了组选择器$('#groups')。我现在已经更新了。 所以您一次只想要一个选择? 不,那我就用一个普通的选择框。基本上默认选择admin,如果用户选择'user'或者'editor'或者两者都选,admin应该取消选择。 如果他同时选择usereditorusereditor 中的任何一个,那么管理员应该取消选择吗? 【参考方案1】:

我想通了:

groups.on('change', function () 
    // if anything other than admin is selected deselect admin
    var selected = groups.find('option:selected');
    console.log('selected: ' + selected.val());
    if (selected.val() == 'admin' && selected.length == 1) 
        $('#admin').prop('selected', true);
     else 
        $('#admin').prop('selected', false);
    
);

groups 只是选择器的别名。

【讨论】:

【参考方案2】:

$('#groups').on('change', function () 
    var values = $(this).val();
    var new_values = [];
    if ((values.includes('user')) || (values.includes('editor')))
        for(var i=0; i<values.length; i++)
          if (values[i] !== 'admin')
            new_values.push(values[i])
          
        
        $(this).val(new_values);
    
        
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-md-3">
    <select class="form-control" id="groups" multiple>
        <option value="admin" selected="selected" id="admin">Admin Only</option>
        <option value="user">User</option>
        <option value="editor">Editor</option>
    </select>
</div>

【讨论】:

它可以工作,但我更喜欢我找到的解决方案,因为它涉及的代码更少!为这项努力点赞!【参考方案3】:

好吧,你可以循环遍历select options,当select option 的值为"admin" 出现时,你可以通过将 selected 属性设置为 false 来取消选中它。


$(function() 


  $('#groups').on('change', function() 

    let selected = $('#groups').find('option:selected');

    selected = Array.from(selected);

    console.log(selected);

    if(!(selected.length == 1 && selected.value == admin))
    
    	selected.forEach(item => 
  			if (item.value == "admin") 
        
   				 item.selected = false;
  			
   		);
   
  );
);
<!DOCTYPE HTML>
<HTML>

<HEAD>
  <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
</HEAD>

<BODY>

  <select id="groups" multiple>
        <option value="admin" selected="selected" class="optionValue">Admin Only</option>
        <option value="user" class="optionValue">User</option>
        <option value="editor" class="optionValue">Editor</option>
</select>

</BODY>

</HTML>

【讨论】:

这真的行不通。点击 ctrl 并选择 'admin' 和 'user'... 'admin' 不会取消选择 现在可以使用了!我更喜欢我的版本,因为它的代码更少,但要为我的努力投票! @Alex 你现在可以检查一下吗? 我做到了!见上一条评论!【参考方案4】:

在我尝试过的 jQuery 2.2.4 版本中取消选择下面包含的选定选项。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Bootstrap Example</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </head>
    <body>
        <div class="col-md-3">
            <select class="form-control" id="groups" multiple="multiple">
                <option value="admin" selected="selected" id="admin">Admin Only</option>
                <option value="user">User</option>
                <option value="editor">Editor</option>
            </select>
        </div>
    </body>
</html>
<script>
$('#groups').on('change', function () 
    var selected = $('#groups').find('option:selected').val();
    console.log('selected: ' + selected);
    if (selected == 'admin') 
        $("#groups > option:selected").attr("selected",false);            
        $('#groups > option[value="admin"]').prop('selected', true);
    
);
</script>

【讨论】:

无论如何,这段代码总是选择管理员。这与我想要实现的目标相反...... 现在修改了脚本的一些变化 按 ctrl 并选择 'admin' 和 'user'... 'admin' 不会取消选择

以上是关于在一定条件下取消选中多选框的选中项的主要内容,如果未能解决你的问题,请参考以下文章

ElementUI 将table多选框改为单选框的解决办法

jquery怎么获取多选框的值

html 多选框 如何用js 控制全选 并且一键复制选中的多项值到剪贴板

js代码里 多选框 如何写成选中状态?

使用jquery实现单选框多选框取消选中状态

el-table表格合并行时多选框选中/取消单号相同数据