未选中的复选框返回空值
Posted
技术标签:
【中文标题】未选中的复选框返回空值【英文标题】:Unchecked checkbox returning null value 【发布时间】:2012-12-13 14:00:04 【问题描述】:我有一组复选框,当它们被选中时,它们将值传递为 1,否则它们将值传递为 0。但是,不是将未选中复选框的值发送为“0”,而是发送的值为“NULL” '。
我有以下 JS 代码,应该相应地将值设置为 0/1,但是该值仍然作为 NULL 发送。有什么办法可以确保在未选中复选框的情况下传递的值为 0?
$('#cb1, #cb2, #cb3, #cb4').on('click', function ()
$(this).val(this.checked ? 1 : 0);
);
更新 这是我的html:
<input type="checkbox" name="cb1" id="cb1" value="1" checked />
<input type="checkbox" name="cb2" id="cb2" value="1" checked />
<input type="checkbox" name="cb3" id="cb3" value="1" checked />
<input type="checkbox" name="cb4" id="cb4" value="1" checked />
默认情况下它们都被选中。
如果其中一个未选中,mysql 将报告以下错误: 0SQLSTATE [23000]:违反完整性约束:1048 列 'ColumnName' 不能为空。
这是因为列设置为不为 Null。即使我已将默认值设置为 0,一旦我单击提交按钮,我仍然会收到错误消息。我尝试删除 Not NULL 属性,但不是将值预填充为 0,而是在数据库中输入为 NULL。
【问题讨论】:
你也可以添加你的html吗? 考虑像这样更改您的 HTML:<input type="hidden" name="cb1" value="0" /><input type="checkbox" name="cb1" id="cb1" value="1" checked />
.
这应该可以,但你的 javascript 中缺少
......这是一个小提琴:jsfiddle.net/5vS3S
【参考方案1】:
如果未选中复选框,则不会发送,因此如果未选中复选框,则将其值设置为 0 无济于事 - 它将始终返回 NULL。
有两种方法可以轻松解决此问题:
1) 假设 php 参数中的 NULL 表示复选框未选中。如果该复选框并不总是存在于页面上,这可能是有问题的。听起来,复选框的数量是可变的,所以这可能行不通。
2) 添加一个与复选框同名的隐藏输入,值为 0BEFORE 复选框。如果未选中复选框,则使用隐藏字段值,如果选中,则使用复选框值。
<input type="hidden" name="checkbox_1" value="0">
<input type="checkbox" name="checkbox_1" value="1">
注意:如果你的名字是数组形式(即它们有方括号),这将不起作用,因为隐藏字段也会增加数组计数。
【讨论】:
其实,如果你的名字是数组形式,只需在括号中包含索引的键即可。然后,您将能够设置输入名称,如数组。 @axiom82 你没明白。是的,你可以做到这一点,但是当检查复选框时,您将向目标数组添加两个元素,因此您将很快丢失对Chekboxes索引的对应,并且您将不会有任何有用的信息,指示数组的索引是否有任何有用的信息指已选中或未选中的项目。不过,您可以对结果数组进行一些简单的后处理来避免这种情况。 很好的解决方案。帮了我很多,特别是第二个。谢谢! 如果我必须收集多个复选框值是什么情况 Linke 我认为这应该适用于丢失将得到 0 并且检查我会继续感谢 - 更新它不工作它添加另一个因为它的数组【参考方案2】:像这样更改您的脚本。希望对您有所帮助。
$(document).ready(function()
$('#cb1, #cb2, #cb3, #cb4').click(function()
$(this).val(this.checked ? 1 : 0);
);
);
【讨论】:
【参考方案3】:使用 jQuery,您可以使用选中的选择器来获取复选框的状态。检查时,长度包含大于0的内容,例如:
$('#id:checked').length
所以你不需要将复选框元素的值设置为0...
【讨论】:
【参考方案4】:那是因为如果你取消选中了复选框,则值为空,因为它没有值。从 w3cschools 检查这个例子:
http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_checkbox
如果您没有选择任何内容,则不会提交该值。但是如果你选择了某个东西,它的值就会被提交。
如果你真的想要真/假值,你需要欺骗它。所以发送选中属性的状态就可以了。
$('#id:checked').length
【讨论】:
【参考方案5】:你可以试试这个,它可能对你有帮助。假设你的表单是这样的:
<tr>
<td>Active</td>
<td><?php echo form_checkbox('active',set_value('active',$student->active),TRUE); ?> </td>
</tr>
现在你像这样设置你的 codeigniter 控制器:
// Set up the form
$rules = $this->student_m->rules;
$this->form_validation->set_rules($rules);
// Process the form
if ($this->form_validation->run() == TRUE)
$data = $this->student_m->array_from_post(array(
'active',
'name'
));
// checking is checkbox is checked or not
($data['active'] == TRUE)?($data['active'] = 1) : ($data['active'] = 0);
$this->student_m->save($data, $id);
redirect('admin/student');
【讨论】:
以上是关于未选中的复选框返回空值的主要内容,如果未能解决你的问题,请参考以下文章
即使未从 HTML 检查到 PHP,如何获取所有复选框变量?
如何检查 Selenium Python 中是不是选中/取消选中复选框? [复制]