通过checkbox循环,并计数每一个选中或取消选中
我遇到了一些问题。 这是一个简单的解释。
我在标准表格上有12个checkbox。 我需要做的是循环通过每个人,并了解哪些是检查,哪些是没有选中。
使用这个,我可以build立一个string,然后input到数据库字段中。 这是一个例子。
(Check1 – 勾选)
(Check2 – 未勾选)
(Check3 – 勾选)
1,0,1
到目前为止,我已经得到了一些代码。
$('input[type=checkbox]').each(function () { if (this.checked) { console.log($(this).val()); } });
它完美的工作,除了它只能带回选中的,不是全部。
对不起,新问题。 我有点新jQuery。
要按照所显示的格式准确地生成结果string,可以使用以下命令:
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);
使用select器
你可以像这样获得所有选中的checkbox:
var boxes = $(":checkbox:checked");
而所有非检查如下:
var nboxes = $(":checkbox:not(:checked)");
你可以循环访问这些集合中的任何一个,并存储这些名称。 如果有什么东西不存在,你知道它已经或未被检查。 在PHP中,如果你有一个被检查过的名字数组,你可以简单地做一个in_array()
请求来知道是否应该在以后检查任何特定的盒子。
连载
jQuery也有一个序列化方法 ,将维护您的表单控件的状态。 例如,jQuery网站上提供的例子如下:
single=Single2&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio2
这将使您能够保持检查元素的信息。
您可以通过编写$(':checkbox').each(...)
来遍历所有的checkbox。
如果我正确理解你的问题,你正在寻找下面的代码:
var str = ""; $(':checkbox').each(function() { str += this.checked ? "1," : "0,"; }); str = str.substr(0, str.length - 1); //Remove the trailing comma
该代码将循环遍历所有的checkbox,并将1,
或0,
添加到string中。
我认为没有足够的时间关注原文中提出的模式考虑。 所以,这里是任何新手都要考虑的事情。
假设你继续build立这个解决scheme。 所有你的经典值都被合并成一个单一的值并存储在数据库中。 你确实在你的数据库中保存了一点空间,还有一些时间编码。
现在让我们考虑一下,你必须执行在当前checkbox3和4之间添加新checkbox的频繁和简单的任务。你的开发经理,客户,无论什么期望这是一个简单的改变。
所以你把checkbox添加到UI(简单部分)。 无论有多less个checkbox,您的循环代码已经连接了这些值。 你也认为你的数据库字段只是一个varchar或其他stringtypes,所以它应该也很好。
当客户或您尝试查看更改前的数据时会发生什么? 你本质上是从左到右的序列化。 然而,现在3之后的值都是1个字符。 你打算如何处理你现有的所有数据? 你要编写一个应用程序,把它全部从数据库中取出来,处理它,为新的问题位置添加一个默认值,然后把它们全部存回数据库中? 当你每隔一个星期或一个月有几个新值时会发生什么? 如果你移动的位置和jQuery处理他们在不同的顺序呢? 你所有的数据都被洗掉了,必须重新处理才能重新排列。
不提供紧密的关键价值关系的整个概念是ludacris,并会结束让你陷入麻烦,而不是以后。 对于那些你考虑这个,请不要。 对架构更改的其他build议很好。 使用子表格,主表格中的更多字段,问题答案表格等等。只要数据结构可能发生变化,就不要存储未标记的数据。
不知道关于JS …但可以用PHP这样做…
我希望这个链接可以帮助..
$.extend($.expr[':'], { unchecked: function (obj) { return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked')); } }); $("input:checked") $("input:unchecked")