jQuery val()和checkbox

是否有一些val()对checkbox控件无用的理由,而对于在其他input控件中一致地获取input数据是有用的?

例如对于checkbox, 无论checkbox状态如何 ,at 总是返回“on”。 对于其他实际上没有“值”属性的input控件,例如select和textarea,它的行为与您所期望的相同。 看到:

http://jsfiddle.net/jamietre/sdF2h/4/

我想不出一个好的理由,为什么它不会返回truefalse 。 否则,至less在检查时才返回“on”,否则返回空string。 否则,至less总是返回一个空string,因为checkbox没有value属性!

很明显,我知道如何使用attr来获得这个值,但是这里是情况。 我正在开发一个简单的(到目前为止)C#jQuery实现在服务器上进行HTMLparsing,我试图完全忠实于jQuery的实现,所以它在客户端或服务器对同一DOM的一致行为。 但是,这似乎是愚蠢的,我很难让自己实际编码的“价值”返回一个checkbox,无论是什么。 但是,如果我不这样做,这将是不一致的。 所以我想明白,这样做有什么理由吗? 它是为了某种目的,还是仅仅是某种人造物? 有人会使用val()方法对付checkbox,如果是的话,为什么? 如果没有,为什么jQuery架构师决定采用这种方法使其变得毫无用处?

我想不出一个好的理由,为什么它不会返回真或假。 否则,至less只有在选中时才返回“on”,否则返回一个空string。 否则,至less总是返回一个空string,因为checkbox没有值属性!

checkbox确实有一个值属性。 在例如使用它是相当普遍的。 多个checkbox的forms,例如:

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

然后,当用户提交表单时,服务器可以通过检查foo[]数组的值来分析哪个checkbox被选中。 checkbox的值不会改变是否被选中; 浏览器根本不会将未经检查的checkbox的值发送到服务器。 如果你这样做。 $('#your-form').serialize()在jQuery中的$('#your-form').serialize() ,它应该类似的工作; 它不应该包括未经检查的checkbox的值。 如果您省略checkbox中的值,则只是默认为on

如果你想检查一个单独的checkbox是否在jQuery中检查,最好的描述性的方法是$(this).is(':checked')

你说“checkbox没有value属性”。 相反: 除了checkbox和单选框value属性是可选的。

来自W3C规范 :

[ value属性]是可选的,除非type属性的值为“radio”或“checkbox”

on是您的浏览器在忽略规范并且不设置value属性时给予元素的默认值。

您需要记住值的含义:在提交表单时,将元素的name发送到服务器。 如果未选中,则不发送该值。 因此,只有在checkbox被选中时才会发送该值。

也许这应该有所帮助

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

使用input[type=checkbox]来selectinput type="checkbox"因为checkbox是和inputtypes=“checkbox”

并将值属性checkbox。

jsfiddle上

UPDATE

 <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

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

他们都分享相同的名称,因为他们是一个普通的button组。 你知道哪些是被检查的,哪些不是通过他们的价值。

另一种方式是

 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> 

但以前似乎增加了更多的dynamic和较乏味(我相信)。

至于@胶囊的问题

 alert("val="+$(this).val()+",checked="+$(this).attr('checked')); <input type="checkbox"> Check me. 

返回值我相信这是checkbox的默认值。

第二个实验也给了价值。

我希望我没有错。

如果你将一个数组传递给val函数,如果checkbox的值与数组中的值相匹配,它会将checkbox设置为选中状态。 来源: http : //api.jquery.com/val/#val-value

 <input id="checkbox" type="checkbox" value="remember"> $("#checkbox").val(["remember"]); 

checkbox并不总是单独的,并且在提交表单时传递它的值(否则,名称/值根本不传递)。

将数组作为checkbox使用非常有用,可以使用name="test[]"作为名称,并在每个值中设置不同的值。 parsing提交的结果时,最终会得到一个包含所有选中值的数组

checkbox的值与文本框一样,只有在提交时选中checkbox的情况下才提交表单,此值将被发送到服务器。

与文本框不同的是,checkbox的默认值是on – 当选中该checkbox但没有自己的value时,该checkbox会发送到服务器,以便处理代码可以知道它已被选中。

所以.val()方法工作得很好,返回元素的值。

你是正确的,缺乏简单的方法来查看是否select了特定的checkbox/单选button,如$("#mycheckbox").checked()但这就是我们的插件。 🙂