【问题标题】:Limiting number of checkbox to be check jQuery限制要检查的复选框的数量 jQuery
【发布时间】:2011-07-18 09:05:12
【问题描述】:

我有一个包含多组复选框的网页(在每个组中,所有复选框共享同一个类)。 我不仅想限制可以检查的复选框的数量,还想限制以下内容 - 如果要检查的复选框的最大数量为 3,并且用户检查了第 4 个复选框,而不是显示消息,我想取消选择时间最长的复选框。考虑到我有多组复选框并且每组都有不同的最大允许复选框数,这是如何实现的?

顺便说一句,我没有使用 jQuery UI 复选框元素。

谢谢!

【问题讨论】:

  • 你能提供你目前拥有的代码以及你遇到的问题吗?
  • 我只是不确定如何去做。从技术上讲,我只能捕获特定组的更改事件,然后查看该组上所有复选框的状态并解决它 - 但是如何仅为特定组创建事件,以及如何检查哪些复选框检查特定组?
  • 你可以使用jQuery的delegate()方法来拦截一些复选框的点击,如果它们在同一个父元素下(比如<div>
  • 它们在特定的 div 下 - 我该怎么做?
  • 至少会回答这个问题,如果你愿意,请继续在 cmets 中询问,我会编辑

标签: jquery checkbox limit


【解决方案1】:

首先,你必须:

  1. 将事件附加到这些复选框
  2. 存储有关检查时间的信息
  3. 如果选中的复选框是第四个,找到第一个复选框并取消选中它

您可以使用 jQuery 的以下功能:

  • .delegate().change().live().bind() 附加事件,
  • data- 用于存储 JS 时间戳的 HTML 属性(例如,您可以拥有 <input type="checkbox" data-checked="1310950561097" />),
  • .parents()选择复选框组的容器,
  • jQuery 的.each() 函数遍历同一组内所有选中的复选框(上述相同的容器),

通过使用这些功能,您应该可以实现您所需要的。

【讨论】:

  • 感谢您的意见。我的实际复选框在 td 内、tr 内、表格内、div 内。我可以让 div 或 table 对每个组都有一个唯一的 id,但是这样: $('#div-id').delegate('checkbox', 'change', function (event) { alert("change to复选框"); });不会触发任何东西。这是为什么?
  • @Raiders: 因为你刚才引用的搜索<checkbox> 标签而不是<input type="checkbox" /> 标签。尝试用'input[type="checkbox"]' 替换'checkbox',它应该可以工作。请参阅this jsfiddle 作为证明。
  • @Raiders:顺便说一句。如果这对您没有影响,您可能希望为每组复选框提供相同的类(分配类,例如 checkGroup 用于包含来自单个组的复选框的容器) - 区分什么是组会更容易什么不是(您不需要检查区分组的多个 ID)。然后,您将能够仅计算当前选中的复选框所在的具有 checkGroup 类的同一容器中的选中复选框。
【解决方案2】:

要将事件附加到一组复选框,您可以使用 jQuery 的 delegate 方法,如下所示:

$('#checkbox-container').delegate('checkbox', 'change', function (event) {
  // event.target is the clicked checkbox element here
});

【讨论】:

    【解决方案3】:

    我对这个问题的第一个想法是:

    var checkorder = [];
    $('input:checkbox.checkboxes').click(
        function(){
            checkorder.push($(this).index('input:checkbox'));
            if (checkorder.length > 3){
                $('input:checkbox.checkboxes').eq(checkorder[0]).removeProp('checked');
                checkorder.splice(0,1);
            }
        });
    

    JS Fiddle demo.

    这种方法的问题:

    1. 它将选择应用于所有具有相同class 的复选框。
    2. 不区分单击以选中或取消选中复选框。

    参考资料:

    【讨论】:

    • 我喜欢你的解决方案。我刚刚添加了以下处理取消选中复选框的情况: var loc = $.inArray(checked, temp); if (-1 == loc) { temp.push(checked); } else { temp.splice(loc, 1);这对你有意义吗?
    • 似乎,是的; ...记住现在是早上二十点到四点,我无法入睡。所以......我的判断可能不是最好的。 JS Fiddle it,也许吧?
    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 2016-10-25
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多