jquery - 限制复选框选择并将选择移动到第一个选择

标签 jquery html input checkbox

目标是对复选框输入列表进行选择限制。 请参阅代码,其中包含三个复选框,jquery 限制从三个复选框中最多选择两个。但我希望有限制,以便当两个复选框被选中并且用户试图点击第三个未选中的框时,这会将第一个选择更改为第三个框。

http://jsfiddle.net/EYJj8/

<input type="checkbox" class="check" name="check1" id="check1" >
<label class="layout" for="check1"></label>

<input type="checkbox" class="check" name="check2" id="check2" >
<label class="layout" for="check2"></label>

<input type="checkbox" class="check" name="check3" id="check3" >
<label class="layout" for="check3"></label>

$("input:checkbox").click(function() {
var bol = $("input:checkbox:checked").length >= 2;     
$("input:checkbox").not(":checked").attr("disabled",bol);
});

最佳答案

在这种情况下,您需要实现一个状态变量来跟踪选中复选框的顺序。这可能看起来像这样:

var checkState = [];

$("input:checkbox").click(function() {
    if($(this).is(':checked')) {
        checkState.push(this);
        if(checkState.length > 2)
            $(checkState.shift()).prop('checked',false);
    } else {
        var ix = checkState.indexOf(this);
        if(ix > -1) checkState.splice(ix,1);
    }
});

Demo

如果您不想以这种方式使用数组,您可以在每个复选框被选中时添加一个时间戳。不过,当您要弄清楚要先取消选中哪个项目时,它仍然会变得有点困惑:

$(":checkbox").change(function() {
    $box = $(this);
    $box.data('check-time', $box.is(':checked') ? (new Date().getTime()) : null);

    if($(':checkbox:checked').length > 2) {
        $(':checkbox:checked').sort(function(a,b) { 
            var aTime = $(a).data('check-time');
            var bTime = $(b).data('check-time');
            return aTime == bTime ? 0 : aTime < bTime ? -1 : 1;
        }).first().prop('checked', false);
    }
});

Demo

关于jquery - 限制复选框选择并将选择移动到第一个选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18378182/

相关文章:

javascript - 从头开始重新创建 slick js 响应中心模式

javascript - 对象上的流体和动态动画出现和消失(HTML/JS/CSS)

python - 如何授予输入权限以接受带空格的名称?

c++ - 如何将文件中的数据存储到具有 vector 成员的结构 vector 中

javascript - 在 jQuery 中检测何时为 "cursor position inside input change"?

javascript - parseInt() 和 parseFloat() 的区别

javascript - 当我单击另一个 div 中的按钮时,如何为 div 添加 css 样式

javascript - 单击获取数据属性并将其放置在 div 内

jquery - 使用jquery删除父li文本

javascript - 如何通过ajax调用将两个不同页面的数据一起发送到php?