循环选中复选框并计算每个选中或取消选中的复选框

时间:2009-12-27 03:38:55

标签: jquery checkbox

我遇到了一些问题。这是一个简短的解释。

我在标准表格上有12个复选框。我需要做的是遍历每一个并了解哪些被检查以及哪些未被检查。

使用它,然后我可以构建一个字符串,然后我将其输入到数据库字段中。这是一个例子。

(Check1 - 选中)
(Check2 - 未选中)
(Check3 - 选中)

1,0,1

到目前为止,我已经有了这段代码。

$('input[type=checkbox]').each(function () {
           if (this.checked) {
               console.log($(this).val()); 
           }
});

它完美无缺,只是它只会带回已检查的,而不是全部。

抱歉有新问题。我对jquery有点新鲜。

5 个答案:

答案 0 :(得分:112)

要以您显示的格式精确构建结果字符串,您可以使用:

var sList = "";
$('input[type=checkbox]').each(function () {
    sList += "(" + $(this).val() + "-" + (this.checked ? "checked" : "not checked") + ")";
});
console.log (sList);

但是,我同意@SLaks,我认为您应该重新考虑将其存储在数据库中的结构。

编辑:抱歉,我误读了你想要的输出格式。这是一个更新:

var sList = "";
$('input[type=checkbox]').each(function () {
    var sThisVal = (this.checked ? "1" : "0");
    sList += (sList=="" ? sThisVal : "," + sThisVal);
});
console.log (sList);

答案 1 :(得分:58)

使用选择器

您可以选中所有选中的复选框:

var boxes = $(":checkbox:checked");

并且所有未经检查的内容如下:

var nboxes = $(":checkbox:not(:checked)");

您只能循环浏览其中一个集合,并存储这些名称。如果没有任何东西,你知道它是否被检查过。在PHP中,如果您有一个已检查的名称数组,您只需执行in_array()请求即可知道是否应该在以后检查任何特定的框。

序列化

jQuery还有一个serialize method,它将维护表单控件的状态。例如,jQuery网站上提供的示例如下:

single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2

这样您就可以保留检查哪些元素的信息。

答案 2 :(得分:15)

您可以通过编写$(':checkbox').each(...)

来遍历所有复选框

如果我理解你的问题,你正在寻找以下代码:

var str = "";

$(':checkbox').each(function() {
    str += this.checked ? "1," : "0,";
});

str = str.substr(0, str.length - 1);    //Remove the trailing comma

此代码将遍历所有复选框,并将1,0,添加到字符串中。

答案 3 :(得分:0)

我认为没有足够的时间关注原帖中提出的架构考虑因素。因此,对于任何新手来说,这都需要考虑。

假设您继续构建此解决方案。所有的卑鄙值都会被合并为一个值并存储在数据库中。你确实在数据库中节省了一点空间并且有时间编码。

现在让我们考虑一下你必须执行频繁而简单的任务,即在当前复选框3&之间添加一个新的复选框。 4.您的开发经理,客户,无论期望这是一个简单的改变。

因此,您可以将复选框添加到UI(简单部分)。无论有多少个复选框,循环代码都会连接值。您还认为您的数据库字段只是一个varchar或其他字符串类型,因此它也应该没问题。

当客户或您尝试在更改之前查看数据时会发生什么?你基本上是从左到右序列化。但是,现在3之后的值全部偏离1个字符。您打算如何处理所有现有数据?您是否要编写一个应用程序,将其全部退出数据库,处理它以添加新问题位置的默认值,然后将其全部存储回数据库中?如果您每周或每月分享几个新值,会发生什么?如果您移动位置并且jQuery以不同的顺序处理它们会怎么样?您的所有数据都被清除,必须重新进行重新处理才能重新排列。

没有提供紧密的键值关系的整个概念是ludacris,并且最终会让你早日遇到麻烦。对于那些考虑到这一点的人,请不要。架构更改的其他建议很好。使用子表,主表中的更多字段,问答表等。当数据的结构可能发生变化时,不要存储未标记的数据。

答案 4 :(得分:-1)

$.extend($.expr[':'], {
        unchecked: function (obj) {
            return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked'));
        }
    });

$("input:checked")
$("input:unchecked")