我有一个带有一些复选框的
HTML表单.我使用jQuery .serialize()函数使查询字符串提交到数据库.我遇到的问题是,当取消选中复选框时,.serialize()函数不会在查询字符串中注册它.
我的问题在这个jsfiddle:http://jsfiddle.net/cTKhH/中得到了说明.
这是一个问题,因为我仍然需要将未经检查的复选框的值保存到数据库.现在,仅在选中复选框时才会保存信息.如果未选中,并且提交了来自.serialize()的信息,则不会进行任何更改,因为没有提交任何信息.
有没有人知道如何使我的.serialize()函数在取消选中时返回所有复选框的未经检查的值?
谢谢!!
**编辑**
再多一点信息,我现在知道为什么未提交未选中的复选框,因为它不是“成功”的表单控件,请参见此处:http://www.w3.org/TR/html401/interact/forms.html#successful-controls.
希望我仍然修改.serialize()函数以提交未经检查的值.
解决方法
这是一个简单的例子 – 我相信你可以将它包装成一个漂亮的插件.
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());
});
});