【发布时间】:2013-07-23 11:41:00
【问题描述】:
我们目前正在使用$('form').serialize() 获取所有表单信息
这会将任何复选框值返回为“开”或“关”。
有什么方法可以使用相同的方法获得 1/0 或真/假值?
【问题讨论】:
标签: javascript jquery serialization
我们目前正在使用$('form').serialize() 获取所有表单信息
这会将任何复选框值返回为“开”或“关”。
有什么方法可以使用相同的方法获得 1/0 或真/假值?
【问题讨论】:
标签: javascript jquery serialization
是的。您可以通过添加一个与复选框同名的隐藏输入来做到这一点,如果未选中复选框,则将提交该值:
<input type="hidden" name="option" value="false"/>
<input type="checkbox" name="option" value="true"/>
如果选中复选框,它将提交两个值。但是服务器端会读取最新的(复选框的值)
【讨论】:
表单控件的值总是一个字符串。您可以使用单选按钮为相同的控件名称获取不同的值:
<form ...>
<input type="radio" name="whatever" value="true">true
<br>
<input type="radio" name="whatever" value="false">false
...
</form>
只能勾选一项,只有勾选的名称/值才会发送到服务器。
【讨论】:
如果我们的页面中有多个复选框,例如:
<input id="reminder" name="Check1" value="false" type="checkbox" />
<input id="alarm" name="Check2" value="false" type="checkbox" />
我们必须绑定这些复选框的更改事件,并将其值设置为真或假。
$('input[type=checkbox]').on('change', function(){
var name = $(this).attr('name');
if($(this).is(':checked')){
$('input[name= "' +name +'"]').val(true);
$(this).val(true);
}
else{
$(this).val(false);
$('input[name= "' +name +'"]').val(false);
}
});
默认情况下,$('form').serializeArray()中不出现checkbox值,勾选时出现。
我们必须为每个复选框保留一个隐藏字段,例如:
<input type="hidden" value="false" name="Check1" />
<input type="hidden" value="false" name="Check2" />
现在当我们序列化表单时,我们会得到正确的值,例如: 检查1=真 检查2=假
【讨论】:
<input type="checkbox" name="check1" value="true" id="check1">
只需设置值
【讨论】:
您可以为复选框添加新类并在单击时设置值。
<input class="checkbox" id="someId" type="checkbox" value="false" />Checkbox
并使用一个小的 JQuery 助手
$('.checkbox').click(function () {
$(this).val() == "false" ? $(this).val("true") : $(this).val("false");
});
然后就可以获取复选框的值或者序列化表单了。
【讨论】: