我有一组复选框,当它们被选中时,它们将值传递为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。
答案 0 :(得分:52)
如果未选中复选框,则不会发送它,因此如果未选中它,则将其值设置为0将无助于它 - 它将始终返回NULL。
有两种方法可以轻松解决此问题:
1)假设PHP params中的NULL意味着取消选中该复选框。如果页面上并不总是存在该复选框,则可能会出现问题。通过它的声音,有不同数量的复选框,所以这可能不起作用。
2)添加一个与复选框同名的隐藏输入,其值为0 BEFORE 复选框。如果取消选中该复选框,将使用隐藏字段值,如果选中则将使用复选框值。
<input type="hidden" name="checkbox_1" value="0">
<input type="checkbox" name="checkbox_1" value="1">
注意:如果你的名字是数组形式(即它们中有方括号),这将不起作用,因为隐藏字段也会增加数组计数。
答案 1 :(得分:1)
改变你的脚本。希望它有所帮助。
$(document).ready(function(){
$('#cb1, #cb2, #cb3, #cb4').click(function(){
$(this).val(this.checked ? 1 : 0);
});
});
答案 2 :(得分:0)
使用jQuery,您可以使用选中的选择器来获取复选框的状态。检查时,长度包含大于0的内容,例如:
$('#id:checked').length
因此,您不需要将checkbox元素的值设置为0 ...
答案 3 :(得分:0)
这是因为如果您取消选中该复选框,则该值为null,因为它没有值。从w3cschools查看此示例:
http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_checkbox
如果您未选择任何内容,则不会提交该值。但如果您选择了某些内容,则会提交其值。
如果你真的想要真值/假值,你需要欺骗它..所以发送checked属性的状态就行了。
$('#id:checked').length
答案 4 :(得分:0)
你可以试试这个,它可能对你有所帮助。假设您的表单是这样的:
<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');
}