多个复选框中的一个应始终保持未选中状态
One checkbox of many should always stay unchecked
有很多关于JavaScript和条件检查复选框的主题,但我还没有找到一个与我的情况相匹配的主题。
我的用例:我生成了许多行,每行都有复选框,假设数字是n
。现在,用户应该只能检查其中的n-1
。换言之,当我们有4个复选框,其中3个被选中时,最后一个应该被禁用。如果只选中了4个复选框中的2个,则所有复选框都可用。
我试过:
var $checks = $('input:checkbox').click(function (e) {
var numChecked = $checks.filter(':checked').length;
var lastUnchecked = $checks.prop('checked', false);
if (numChecked = $checks.length - 1) {
lastUnchecked.disabled = true;
}
else {
//enable checkbox that was disabled before
lastUnchecked.disabled = false;
}
});
但这不起作用,因为var lastUnchecked = $checks.prop('checked', false);
返回所有复选框,而不仅仅是未选中的
试试这个。
逻辑:更改时,首先重新启用所有复选框。然后根据检查的数量重新确定是否需要禁用任何。
var table = $('table'), cbs = $(':checkbox');
table.on('change', ':checkbox', function(evt) {
cbs.prop('disabled', false);
if (cbs.filter(':checked').length == cbs.length - 1)
cbs.not(':checked').prop('disabled', 1);
})
Fiddle。
每次用户检查其中一个时,尝试对检查的项目进行计数:
$(document).on('change', '.chk', function() {
var that = $(this);
var par = that.closest('ul');
var max = par.find('.chk').length - 1;
var checked = par.find('.chk').filter(':checked').length;
if (checked < max) {
par.find('.chk').prop('disabled', '');
} else {
par.find('.chk').not(':checked').prop('disabled', 'disabled');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<ul>
<li><input class="chk" type="checkbox" /> Checkbox</li>
<li><input class="chk" type="checkbox" /> Checkbox</li>
<li><input class="chk" type="checkbox" /> Checkbox</li>
<li><input class="chk" type="checkbox" /> Checkbox</li>
<li><input class="chk" type="checkbox" /> Checkbox</li>
</ul>
这是更简单的
$(document).ready(function(){
var numBox;
var $checks = $('input:checkbox').click(function (e) {
var numChecked = $checks.filter(':checked').length;
if (numChecked < numBox - 1) {
$checks.filter(':disabled').prop('disabled', false);
} else {
$checks.not(':checked').prop('disabled', true);
}
});
numBox = $check.length;
});
相关文章:
- HashMap可以始终保持相同的顺序
- 如何在WebRTC中始终保持1:1的纵横比视频
- 在节点中.js“模块”始终是一个对象
- 时间滑翔机对象始终保持空且未定义
- navigator.serviceWorker.controller始终保持为空
- 多个复选框中的一个应始终保持未选中状态
- 在 Ext JS 5 Grid 中获取选中项的列表始终返回一个空数组
- 如果网站在框架/ iframe内,则document.referer将始终包含一个值
- 如何在不同浏览器中以及缩放时使单词始终保持在当前行上的位置
- 希望在重新加载后始终保持网页位置打开
- 如何使滚动条始终保持在页面底部
- 广播中的NG模型始终保持真实
- 一次保持一个传单侧边栏打开
- 数据表.js - 始终返回一个空数组
- Is回调函数始终是一个闭包
- Jquery下拉列表,希望页面加载时始终有一个值位于顶部
- 保持一个连续的总数
- Javascript:在保持一个键值的同时,用来压平嵌套的JSON数组
- 如何始终保持一个元素与活动类
- 创建一个始终保持打开状态的窗口