如果在表单提交时勾选复选框输入值数据,浏览器是否仅发送复选框输入值数据是标准行为?
如果没有提供值数据,默认值是否总是“on”?
假设上述假设是正确的,那么所有浏览器的这种行为是否一致呢?
如果在表单提交时勾选复选框输入值数据,浏览器是否仅发送复选框输入值数据是标准行为?
如果没有提供值数据,默认值是否总是“on”?
假设上述假设是正确的,那么所有浏览器的这种行为是否一致呢?
当前回答
我用下面的代码解决了这个问题:
HTML表单
<input type="checkbox" id="is-business" name="is-business" value="off" onclick="changeValueCheckbox(this)" >
<label for="is-business">Soy empresa</label>
而javascript函数通过改变复选框值的形式:
//change value of checkbox element
function changeValueCheckbox(element){
if(element.checked){
element.value='on';
}else{
element.value='off';
}
}
服务器检查数据张贴是“打开”还是“关闭”。我使用的是playframework java
final Map<String, String[]> data = request().body().asFormUrlEncoded();
if (data.get("is-business")[0].equals('on')) {
login.setType(new MasterValue(Login.BUSINESS_TYPE));
} else {
login.setType(new MasterValue(Login.USER_TYPE));
}
其他回答
浏览器只发送复选框输入是标准行为吗 价值数据是否在表单提交时进行检查?
是的,因为否则就没有可靠的方法来确定复选框是否被选中(如果它改变了值,则可能存在这样的情况,即当您选中的期望值与它被交换到的值相同时)。
如果没有提供值数据,默认值是否总是“on”?
其他答案证实“开”是默认值。但是,如果你对值不感兴趣,可以使用:
if (isset($_POST['the_checkbox'])){
// name="the_checkbox" is checked
}
在你的帖子中
'your_field': your_field.is(':checked'),
同样的问题,未选中的复选框将不会在表单提交时发送,我提出了另一种解决方案,而不是镜像复选框项目。
获取所有未选中的复选框
var checkboxQueryString;
$form.find ("input[type=\"checkbox\"]:not( \":checked\")" ).each(function( i, e ) {
checkboxQueryString += "&" + $( e ).attr( "name" ) + "=N"
});
我用下面的代码解决了这个问题:
HTML表单
<input type="checkbox" id="is-business" name="is-business" value="off" onclick="changeValueCheckbox(this)" >
<label for="is-business">Soy empresa</label>
而javascript函数通过改变复选框值的形式:
//change value of checkbox element
function changeValueCheckbox(element){
if(element.checked){
element.value='on';
}else{
element.value='off';
}
}
服务器检查数据张贴是“打开”还是“关闭”。我使用的是playframework java
final Map<String, String[]> data = request().body().asFormUrlEncoded();
if (data.get("is-business")[0].equals('on')) {
login.setType(new MasterValue(Login.BUSINESS_TYPE));
} else {
login.setType(new MasterValue(Login.USER_TYPE));
}
当且仅当复选框被选中时,复选框将发布值“on”。您可以使用隐藏输入,而不是捕获复选框值
JS:
var chk = $('input[type="checkbox"]');
chk.each(function(){
var v = $(this).attr('checked') == 'checked'?1:0;
$(this).after('<input type="hidden" name="'+$(this).attr('rel')+'" value="'+v+'" />');
});
chk.change(function(){
var v = $(this).is(':checked')?1:0;
$(this).next('input[type="hidden"]').val(v);
});
HTML:
<label>Active</label><input rel="active" type="checkbox" />