jQuery表单post将布尔复选框转换为“on”和“off”?

时间:2011-03-15 20:30:06

标签: javascript jquery

我有一个带有复选框的相当简单的表单,我注意到我的服务器端应用程序没有选中我的复选框值:

$.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" >

3 个答案:

答案 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'));
});