Html Do复选框仅输入post数据,如果它们是';重新检查?

Html Do复选框仅输入post数据,如果它们是';重新检查?,html,input,checkbox,Html,Input,Checkbox,如果在表单提交时选中复选框输入值数据,浏览器是否只发送该数据 如果没有提供值数据,默认值是否始终“打开” 假设以上是正确的,那么这种行为在所有浏览器中都是一致的吗 浏览器只发送复选框输入是否是标准行为 是否在提交表单时检查了值数据 是的,因为否则就没有确定复选框是否被选中的可靠方法(如果它更改了值,那么当您所需的值(如果被选中)与被替换的值相同时,可能存在这种情况) 如果没有提供值数据,默认值是否始终“打开” 其他答案确认“开”是默认值。但是,如果您对该值不感兴趣,请使用: if (isset(

如果在表单提交时选中复选框输入值数据,浏览器是否只发送该数据

如果没有提供值数据,默认值是否始终“打开”

假设以上是正确的,那么这种行为在所有浏览器中都是一致的吗

浏览器只发送复选框输入是否是标准行为 是否在提交表单时检查了值数据

是的,因为否则就没有确定复选框是否被选中的可靠方法(如果它更改了值,那么当您所需的值(如果被选中)与被替换的值相同时,可能存在这种情况)

如果没有提供值数据,默认值是否始终“打开”

其他答案确认“开”是默认值。但是,如果您对该值不感兴趣,请使用:

if (isset($_POST['the_checkbox'])){
    // name="the_checkbox" is checked
}

是,标准行为是只有选中复选框时才会发送值。这通常意味着您需要有一种方法来记住服务器端需要哪些复选框,因为并非所有数据都来自表单

默认值始终为“开”,这应在不同浏览器中保持一致

这包括在以下内容中:

复选框(和单选按钮)是可以切换的开/关开关 由用户提供。检查控制元件时,开关为“on” 属性已设置。提交表单时,仅选中“打开”复选框 控制可以成功

在HTML中,每个
元素都与单个(但不是唯一的)名称和值对相关联。仅当
为“成功”时,此对才会在后续请求(在本例中为请求后正文)中发送

因此,如果在
DOM中有这些输入:

<input type="text"     name="one"   value="foo"                        />
<input type="text"     name="two"   value="bar"    disabled="disabled" />
<input type="text"     name="three" value="first"                      />
<input type="text"     name="three" value="second"                     />

<input type="checkbox" name="four"  value="baz"                        />
<input type="checkbox" name="five"  value="baz"    checked="checked"   />
<input type="checkbox" name="six"   value="qux"    checked="checked" disabled="disabled" />
<input type="checkbox" name=""      value="seven"  checked="checked"   />

<input type="radio"    name="eight" value="corge"                      />
<input type="radio"    name="eight" value="grault" checked="checked"   />
<input type="radio"    name="eight" value="garply"                     />
请注意:

  • 2个
    6个
    被排除在外,因为它们设置了
    禁用
    属性
  • three
    发送了两次,因为它有两个同名的有效输入
  • four
    未发送,因为它是未选中的
    复选框
  • 尽管选中了
    项,但未发送
    six
    ,因为
    禁用属性具有更高的优先级
  • seven
    未发送
    name=”“
    属性,因此未提交
关于您的问题:您可以看到,未选中的复选框将不会将其名称+值对发送到服务器,但共享相同名称的其他输入将与其一起发送

像ASP.NET MVC这样的框架通过(秘密地)将每个
复选框
输入与呈现HTML中的
隐藏
输入配对来解决这个问题,如下所示:

@Html.CheckBoxFor( m => m.SomeBooleanProperty )
呈现:

<input type="checkbox" name="SomeBooleanProperty" value="true" />
<input type="hidden"   name="SomeBooleanProperty" value="false" />
如果用户选中该复选框,则两个选项都将被发送:

SomeBooleanProperty=true
SomeBooleanProperty=false

但是服务器将忽略
=false
版本,因为它看到的是
=true
版本,因此如果它没有看到
=true
,它可以确定复选框已呈现,而用户没有选中它-与根本没有呈现的
SomeBooleanProperty
输入相反,这在几乎所有浏览器中都应该是一致的:

复选框(和单选按钮)是可以切换的开/关开关 由用户提供。检查控制元件时,开关为“on” 属性已设置。提交表单时,仅选中“打开”复选框 控制可以成功

成功的定义如下:

成功的控件对于提交是“有效的”。每一个成功的 控件将其控件名与其当前值配对作为 提交的表单数据集。必须定义一个成功的控件 在表单元素中,并且必须具有控件名称


如果未选中复选框,则该复选框对表单提交时发送的数据不起作用

HTML5部分描述表单数据的构造方式:

如果满足以下任何条件,则跳过这些子步骤 对于此元素: [……]

field元素是一个输入元素,其类型为 属性处于复选框状态,其检查性为false

如果缺少
,则指定默认值
on

否则,如果字段元素是类型属性处于复选框状态或单选按钮状态的输入元素,则运行以下嵌套子步骤:

如果field元素指定了value属性,那么让value为该属性的值;否则,将值设为字符串“on”

因此,在表单数据构造过程中跳过未选中的复选框


类似的行为在以下情况下是必需的。所有兼容浏览器都有这种行为是合理的。

就像ASP.NET变体一样,只是将同名的隐藏输入放在实际复选框(同名)之前。只发送最后的值。这样,如果选中某个框,则会发送其名称和值“on”,而如果未选中该框,则会发送相应的隐藏输入的名称以及您希望为其指定的任何值。最后,您将读取$\u POST数组,其中包含所有选中和未选中的元素、“on”和“false”值,没有重复的键。易于在PHP中处理

当且仅当复选框被选中时,复选框才会将值“打开”。您可以使用隐藏输入,而不是捕获复选框值

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);
    });
<label>Active</label><input rel="active" type="checkbox" />
var chk=$('input[type=“checkbox”]”);
chk.each(函数(){
var v=$(this.attr('checked')=='checked'?1:0;
$(本)。在('')之后;
});
chk.change(函数(){
var v=$(this).is(':checked')?1:0;
$(this).next('input[type=“hidden”]”)val(v);
});
HTML

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);
    });
<label>Active</label><input rel="active" type="checkbox" />
激活

我解决了此代码的问题:

HTML表单

<input type="checkbox" id="is-business" name="is-business" value="off" onclick="changeValueCheckbox(this)" >
<label for="is-business">Soy empresa</label>
服务器呢
//change value of checkbox element
function changeValueCheckbox(element){
   if(element.checked){
    element.value='on';
  }else{
    element.value='off';
  }
}
        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));
        }
var checkboxQueryString;

$form.find ("input[type=\"checkbox\"]:not( \":checked\")" ).each(function( i, e ) {
  checkboxQueryString += "&" + $( e ).attr( "name" ) + "=N"
});
function checkboxHack(array $checkbox_input): array
{
    $foo = [];
    foreach($checkbox_input as $value) {
        if($value === 'on') {
            array_pop($foo);
        }
        $foo[] = $value;
    }
    return $foo;
}
array (
    0 => 'off',
    1 => 'on',
    2 => 'off',
    3 => 'off',
    4 => 'on',
    5 => 'off',
    6 => 'on',
),
array (
    0 => 'on',
    1 => 'off',
    2 => 'on',
    3 => 'on',
)  
 <td><input class = "chkhide" type="hidden" name="delete_milestone[]" value="off"/><input type="checkbox" name="delete_milestone[]"   class="chk_milestone" ></td>
  'delete_milestone' => 
array (size=7)
  0 => string 'off' (length=3)
  1 => string 'off' (length=3)
  2 => string 'off' (length=3)
  3 => string 'on' (length=2)
  4 => string 'off' (length=3)
  5 => string 'on' (length=2)
  6 => string 'off' (length=3)