jQuery val()和复选框

jQuery val()和复选框,jquery,Jquery,对于复选框控件来说,val()是无用的,而对于在所有其他输入控件中一致地获取输入数据来说,它是有用的,这有什么理由吗 e、 g.对于复选框,无论复选框状态如何,at始终返回“开”。对于其他实际上没有“值”属性的输入控件,例如select和textarea,其行为与您预期的一样。见: 我想不出一个好的理由来解释为什么它不能返回true或false。否则,至少在选中时返回“on”,否则返回空字符串。否则,至少总是返回一个空字符串,因为复选框没有值属性 显然,我知道如何使用attr获取值,但情况是这

对于复选框控件来说,
val()
是无用的,而对于在所有其他输入控件中一致地获取输入数据来说,它是有用的,这有什么理由吗

e、 g.对于复选框,无论复选框状态如何,at始终返回“开”。对于其他实际上没有“值”属性的输入控件,例如select和textarea,其行为与您预期的一样。见:

我想不出一个好的理由来解释为什么它不能返回
true
false
。否则,至少在选中时返回“on”,否则返回空字符串。否则,至少总是返回一个空字符串,因为复选框没有
属性


显然,我知道如何使用
attr
获取值,但情况是这样的。我正在开发一个简单的(至少到目前为止)C#jQuery实现来在服务器上进行HTML解析,并且我试图完全忠实于jQuery的实现,以便它在客户机或服务器上针对相同的DOM保持一致的行为。但这似乎很愚蠢,我很难让自己真正编码“value”以返回“ON”复选框,不管发生什么。但如果我不这样做,它就不会始终如一。所以我想知道,这样做有什么原因吗?它有什么用途,还是仅仅是某种人工制品?有人会对复选框使用
val()
方法吗?如果是,为什么?如果没有,为什么jQuery架构师决定使用这种方法使其变得无用?

也许这会有所帮助

$(document).ready(function() {
    $('input[type=checkbox]').click(function() {
      alert("val="+$(this).val()+",checked="+$(this).attr('checked'));
    });

});
使用
input[type=checkbox]
选择
input type=“checkbox”
,因为复选框是一个复选框,并使用type=“checkbox”进行输入

并将value属性置于复选框中

更新

<form method="post" action="#">
    PHP<input type="checkbox" name="ch[]" value="PHP"><br/>
    JS<input type="checkbox" name="ch[]" value="JS"><br/>
    JAVA<input type="checkbox" name="ch[]" value="JAVA"><br/>
    PYTHON<input type="checkbox" name="ch[]" value="PYTHON"><br/>
    <input type="submit" name="submit"/>
</form>

PHP
JS
JAVA
PYTHON
和php

if($_POST){
foreach($_POST['ch'] as $post => $value){
    echo "$post -> $value <br/>";
}
}
if($\u POST){
foreach($_POST['ch']作为$POST=>$value){
回显“$post->$value
”; } }
它们都具有相同的名称,因为它们是一组常见的按钮。你知道哪些被检查,哪些没有通过它们的值

另一种方式是

if($_POST){
    foreach($_POST as $post => $value){
        echo "$post -> $value <br/>";
    }
}

<form method="post" action="#">
    PHP<input type="checkbox" name="PHP"><br/>
    JS<input type="checkbox" name="JS"><br/>
    JAVA<input type="checkbox" name="JAVA"><br/>
    PYTHON<input type="checkbox" name="PYTHON"><br/>
    <input type="submit" name="submit"/>
</form>
if($\u POST){
foreach($\以$POST=>$value的形式发布){
回显“$post->$value
”; } } PHP
JS
JAVA
PYTHON
但之前的版本似乎增加了更多的活力,减少了乏味(我相信)

至于“胶囊”的问题

alert("val="+$(this).val()+",checked="+$(this).attr('checked'));
<input type="checkbox"> Check me.
alert(“val=”+$(this.val()+”,checked=“+$(this.attr('checked'));
检查我。
返回上的值,我相信这是复选框的默认值

第二个实验也给出了
on

我希望我没有错。

我想不出一个好的理由 不会返回真或假。弱点 至少,只有当 选中,否则为空字符串。 如果做不到这一点,至少总是会回来 一个空字符串,给定该复选框 没有价值属性

复选框确实具有值属性。在表单中的多个复选框中使用它是很常见的,例如:

<input type="checkbox" name="foo[]" value="1" />
<input type="checkbox" name="foo[]" value="2" />

然后,当用户提交表单时,服务器可以通过检查
foo[]
数组的值来解析选中了哪些复选框。无论是否选中复选框,复选框的值都不会改变;浏览器不会将未选中复选框的值发送到服务器。如果您在jQuery中执行了例如$(“#您的表单”).serialize(),它的工作方式应该类似;它不应该包括未选中复选框的值。如果忽略复选框中的值,它将默认为上的


如果要检查jQuery中是否选中了单个复选框,最好的描述性方法是执行
$(this)。is(“:checked”)

复选框并不总是单独存在,并且在提交表单时传递其值(否则,根本不传递名称/值)


在使用复选框生成数组时非常有用,您可以使用
name=“test[]”
作为它们的名称,并在每个复选框中设置不同的值。在分析提交的结果时,您将得到一个数组,其中包含所有选中的值,复选框的值与文本框相同,并且只有在提交表单时选中复选框时,才会将该值发送到服务器

与文本框不同,复选框具有默认值,即上的
——选中复选框时会将其发送到服务器,但其本身没有
,以便处理代码可以知道它已被选中

因此
.val()
方法工作正常,返回元素的值

您是对的,jQuery缺少查看是否选中了特定复选框/单选按钮的简单方法,类似于
$(“#mycheckbox”)。checked()
,但这正是我们有插件的目的。:)

您说“复选框没有
属性”。相反,
属性是可选的,除了复选框和单选框上的

发件人:

[值<代码>属性<代码>属性]是可选的,除非类型属性的值为“radio”或“checkbox”

on
是浏览器在忽略规范且未设置
属性时为元素提供的默认值


您需要记住该值的含义:在提交表单时,它与元素的
名称一起发送到服务器。如果未选中,则不发送该值。因此,只有选中复选框时才会发送
上的值。

如果将数组传递给val函数,则如果复选框的值与数组中的值匹配,它会将复选框设置为选中。资料来源:


$(“#复选框”).val([“记住]);

你可以给jquerys va做一些手术
<input id="checkbox" type="checkbox" value="remember">    

$("#checkbox").val(["remember"]);