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

chu*_*nce 32 javascript jquery

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

$.post('CreateForm', $('#new-form').serialize(), ...
Run Code Online (Sandbox Code Playgroud)

其他所有内容都正确发布,但我在Firebug中看到它会将复选框值序列化为"on"或"off"而不是"true"和"false",这是我得到的正常<form method="post" action="formpage">...这里发生了什么这是预期的行为吗?我的服务器端模型绑定器不会将"on"等同于"true",因此会丢弃该值.显然我可以改变模型绑定器,但是想确保我没有做错.

编辑:

这是我的标记:

<input type="checkbox" name="CheckboxValue" >
Run Code Online (Sandbox Code Playgroud)

jQuery版本1.4.4

在Firebug中,这是由此产生的帖子:

... other variables &CheckboxValue=on
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 63

问题是您的复选框没有value属性.当jQuery序列化表单时,它使用'on'作为默认值.

你应该给你的复选框一个值:

<input type="checkbox" name="CheckboxValue" value="true" />
Run Code Online (Sandbox Code Playgroud)

请参见此处的示例:http://jsfiddle.net/U6Sbw/1/

  • 为什么jQuery会这样做?当然'真实'会是一个更好的默认值吗? (4认同)

Tao*_*Tao 10

有点晚了,但万一有人偶然发现:如果你还希望输出错误值,这个jQuery插件提供了一个选项,可以始终忽略复选框的"值",而是将其序列化为"true"或"false":

http://tdanemar.wordpress.com/2010/08/24/jquery-serialize-method-and-checkboxes/


小智 7

这是我做的,似乎工作得很好.我使用js2form来执行sping mvc/jackson控制器.

有一个我用以下运行的功能:

$('input[type=checkbox]').unbind('click.checks').bind('click.checks', function(e){
    $(this).val($(this).is(':checked'));
});
Run Code Online (Sandbox Code Playgroud)