![]() |
1
524
到目前为止,我最喜欢的解决方案是放置一个与可能未选中的复选框同名的隐藏输入。我认为它的工作原理是,如果不选中复选框,隐藏的输入仍然成功并发送到服务器,但是如果选中复选框,它将覆盖之前的隐藏输入。这样,您就不必跟踪已发布数据中的哪些值预期来自复选框。
|
![]() |
2
236
为具有不同ID的复选框添加隐藏输入:
提交表单之前,根据选中的条件禁用隐藏输入:
|
![]() |
3
92
我通过使用香草JavaScript解决了这个问题:
你可以用
|
![]() |
4
27
我个人最喜欢的是添加一个与复选框未选中时使用的名称相同的隐藏字段。但解决办法并不像看上去那么容易。 如果添加此代码:
例如,PHP将最后一个值作为要使用的值(请参见: Authoritative position of duplicate HTTP GET query keys ) NET将为您提供一个包含两个元素的数组 我将尝试在某个时候使用node.js、Python和Perl来测试这一点。 |
![]() |
5
23
您不需要为所有复选框创建隐藏字段,只需复制我的代码即可。
如果未选中复选框,它将更改复选框的值
|
![]() |
6
20
服务器端算法可能如下所示:
上述内容并不能完全回答这个问题,但提供了实现类似功能的替代方法。 |
![]() |
7
12
仅测试复选框数组。 |
![]() |
8
11
您可以在表单的提交事件中执行一些Javascript。这就是你所能做的,没有办法让浏览器自己做到这一点。这还意味着,对于没有Javascript的用户,表单将中断。
|
![]() |
9
11
我知道这个问题已经问了3年了,但我找到了一个我认为效果不错的解决方案。
函数的作用是:检查$u POST变量是否已赋值。根据逻辑,如果未分配,则不选中复选框。 |
![]() |
10
9
我实际上会做下面的事情。
然后,当我发布时,我首先删除$\u post数组中拾取的重复值,即显示每个唯一值的atfer。
|
![]() |
11
8
“我采用了服务器的方式。似乎工作得很好-谢谢。2009年12月1日15:19到达4台直升机。”我想向车主推荐。引用:javascript解决方案取决于服务器处理程序的方式(我没有检查) 比如
|
![]() |
12
7
我相信解决这个常见问题的关键是表单的提交输入控件。 要成功解释和处理复选框的未选中值,您需要了解以下内容:
通过检查表单是否已提交(为提交输入元素指定了一个值),可以删除任何未选中的复选框值 假定 例如:
在使用PHP时,检测勾选了哪些复选框是相当简单的。
初始数据可以在每次页面加载时加载,但只有在提交表单时才应进行修改。由于复选框的名称是预先知道的,因此可以单独遍历和检查复选框,因此如果没有其单独的值,则表示未选中复选框。 |
![]() |
13
7
我也喜欢这样的解决方案,你只需发布一个额外的输入字段,使用JavaScript对我来说似乎有点不方便。
对于使用第一次出现的服务器后端(JSP),您应该执行以下操作。
对于所有事件都存储在列表数据类型中的服务器后端(
现在,如果复选框位于隐藏元素之前,则可以尝试获取列表的第一个索引,如果复选框位于隐藏元素之后,则可以获取最后一个索引。
|
![]() |
14
6
好主意,但它会导致表单中有多个同名元素。如果您使用任何基于名称查找元素的javascript,它现在将返回一个元素数组。 我已经用PHP实现了Shailesh的想法,它适合我。 这是我的密码: /* Delete '.hidden' fields if the original is present, use '.hidden' value if not. */ foreach ($_POST['frmmain'] as $field_name => $value) { // Only look at elements ending with '.hidden' if ( !substr($field_name, -strlen('.hidden')) ) { break; } // get the name without '.hidden' $real_name = substr($key, strlen($field_name) - strlen('.hidden')); // Create a 'fake' original field with the value in '.hidden' if an original does not exist if ( !array_key_exists( $real_name, $POST_copy ) ) { $_POST[$real_name] = $value; } // Delete the '.hidden' element unset($_POST[$field_name]); } |
|
15
6
我使用这个jQuery块,它将在提交时向每个未选中的复选框添加一个隐藏的输入。它将保证每次为每个复选框提交一个值,而不会弄乱您的标记,也不会有忘记在稍后添加的复选框上执行此操作的风险。它对您正在使用的任何后端堆栈(PHP、Ruby等)都是不可知的。
|
![]() |
16
5
您还可以拦截form.submit事件并在提交前进行反向检查
|
![]() |
17
5
|
|
18
4
我知道这个问题很老了,有很多答案,但我还是会给我一分钱的。
这样,您将拥有一个如下所示的$\u POST数组:
|
|
19
3
我做的有点不同。首先,我更改了所有未选中复选框的值。设置为“0”,然后将其全部选中,以便提交值。
|
|
20
2
我更喜欢整理美元的邮件
如果帖子没有“checkboxname”值,那么它是未加密的,因此需要指定一个值。
|
![]() |
21
1
Ajax操作的示例是(“:checked”)使用jQuery而不是.val();
params将获取TRUE或FALSE中的值。。 |
![]() |
22
1
注意:空格或新行也是同级,所以这里我需要.previousSibling.previousSibling.value。如果两者之间没有空格,则仅.previousSibling.value
|
![]() |
23
1
@cpburnz做得很对,但是对于很多代码,使用更少的代码也有同样的想法: JS:
HTML(请注意使用数组名的字段名):
对于PHP:
|
![]() |
24
1
所有答案都很好,但是如果您在一个表单中有多个同名的复选框,并且您想发布每个复选框的状态。然后,我通过在复选框中放置一个隐藏字段(与我想要的内容相关的名称)解决了这个问题。
然后通过以下jquery代码控制复选框的更改状态:
现在,在更改任何复选框时,它将更改相关隐藏字段的值。在服务器上,您只能查看隐藏字段,而不是复选框。 希望这将帮助有这种问题的人。欢呼:) |
![]() |
25
1
您可以在提交表单之前添加隐藏元素。
|
![]() |
26
1
复选框的问题是,如果未选中复选框,则它们不会与表单一起发布。如果选中复选框并发布表单,您将在$\u post变量中获得复选框的值,您可以使用该值处理表单,如果未选中,则不会向$\u post变量添加任何值。 在PHP中,通常通过对checkbox元素执行isset()检查来解决这个问题。如果您期望的元素没有在$\u POST变量中设置,那么我们知道复选框没有被选中,并且该值可能为false。
但是,如果您创建了一个动态表单,那么您并不总是知道复选框的name属性,如果您不知道复选框的名称,那么您就不能使用isset函数来检查此表单是否已与$\u POST变量一起发送。 |
|
27
1
|
|
28
1
如果要提交复选框值数组(包括未选中的项),可以尝试以下操作:
|
![]() |
29
1
如果在提交时未选中该复选框,请将复选框值更新为“否”,并将“选中”设置为“真” https://jsfiddle.net/pommyk/8d9jLrvo/26/
|
![]() |
30
1
对于复选框,在不使用隐藏类型值的情况下执行此操作的简单方法是:
在PHP中,对于发布的表单数据,请执行以下操作:
|
![]() |
Chris · jQuery多种形式。需要在“提交”时捕获$(this)表单 10 月前 |
![]() |
girdeux · Django:在Form的init方法中使用小部件? 11 月前 |
|
Charlie · 为什么我的复选框和单选按钮的间距很奇怪? 11 月前 |