我有一个带有一些复选框的
HTML表单.我使用jQuery .serialize()函数使查询字符串提交到数据库.我遇到的问题是,当取消选中复选框时,.serialize()函数不会在查询字符串中注册它.
我的问题在这个jsfiddle:http://jsfiddle.net/cTKhH/中得到了说明.
这是一个问题,因为我仍然需要将未经检查的复选框的值保存到数据库.现在,仅在选中复选框时才会保存信息.如果未选中,并且提交了来自.serialize()的信息,则不会进行任何更改,因为没有提交任何信息.
有没有人知道如何使我的.serialize()函数在取消选中时返回所有复选框的未经检查的值?
谢谢!!
**编辑**
再多一点信息,我现在知道为什么未提交未选中的复选框,因为它不是“成功”的表单控件,请参见此处:http://www.w3.org/TR/html401/interact/forms.html#successful-controls.
解决方法
这是一个简单的例子 – 我相信你可以将它包装成一个漂亮的插件.
HTML
<form id="doit" action="" method="post"> <input type="checkBox" name="test" data-checkedName="test" data-uncheckedid="yup" value="true" class="checkedValue" /> <input type="hidden" name="test" id="yup" value="false" /> <input type="submit" value="serialize" /> </form>
JS
$(function () { $(".checkedValue").click(function () { var $cb = $(this),$associatedHiddenField = $("#" + $cb.attr("data-uncheckedid")),name = $cb.attr("data-checkedName"); if (this.checked) { $cb.attr("name",name); $associatedHiddenField.removeAttr("name"); } else { $cb.removeAttr("name"); $associatedHiddenField.attr("name",name); } }); $("#doit").submit(function (e) { e.preventDefault(); console.log($(this).serialize()); }); });