我有一个带有复选框的相当简单的表单,我注意到我的服务器端应用程序没有选中我的复选框值:
$.post('CreateForm', $('#new-form').serialize(), ...
其他所有内容都正确发布,但我在Firebug中看到它会将复选框值序列化为“on”或“off”而不是“true”和“false”,这是我得到的正常{{1} } ...这里发生了什么,这是预期的行为吗?我的服务器端模型绑定器不会将“on”等同于“true”,因此会丢弃该值。显然我可以改变模型绑定器,但是想确保我没做错。
编辑:
这是我的标记:
<form method="post" action="formpage">
jQuery版本1.4.4
在Firebug中,这是由此产生的帖子:
<input type="checkbox" name="CheckboxValue" >
答案 0 :(得分:60)
问题是您的复选框没有value
属性。当jQuery序列化表单时,它使用'on'作为默认值。
您应该为复选框指定一个值:
<input type="checkbox" name="CheckboxValue" value="true" />
请参阅此处的示例:http://jsfiddle.net/U6Sbw/1/
答案 1 :(得分:9)
有点晚了,但万一有人偶然发现:如果您还希望输出 false 值,则此jQuery插件提供了始终忽略复选框的“值”而是序列化的选项它是“真实的”或“虚假的”:
http://tdanemar.wordpress.com/2010/08/24/jquery-serialize-method-and-checkboxes/
答案 2 :(得分:7)
这是我所做的,似乎效果很好。我使用js2form来编组sping mvc / jackson控制器。
使用以下命令运行函数:
$('input[type=checkbox]').unbind('click.checks').bind('click.checks', function(e){
$(this).val($(this).is(':checked'));
});