为什么* [选中]与单个选中的输入框不匹配?

时间:2011-12-29 20:43:21

标签: javascript jquery jquery-selectors

假设我有一个id为'test'的复选框,并且它在一个加载了jQuery 1.5.2的页面上。

<input id="test" type="checkbox"/>

现在,如果我点击复选框将其设置为checked状态...

为什么$("#test").is(":checked")返回true$("#test").is("*[checked]")返回false

这是jsFiddle with the described scenario

5 个答案:

答案 0 :(得分:8)

[checked]是一个选择器,用于选择当前使用 checked属性检查的元素而不是属性 - 换句话说“如果元素具有checked属性,捡起来”。

如果要检查是否选中了复选框,则必须使用:checked

使用示例:

if($('#test').is(':checked'))
{
   return true;
}

使用jQuery 1.6及更高版本,您可以出于性能原因使用.prop()函数。

if($('#test').prop('checked'))
{
   return true;
}

答案 1 :(得分:2)

因为checked不是input元素的属性。它是属性。您的*[checked]选择器会检查它是否具有checked属性,该属性在元素上永远不存在。您可以将checked="checked"添加到input元素,该元素设置该对象的checked属性,但即使取消选中该框,该属性也将始终存在。这是因为选中和取消选中只会更改复选框的checked属性,而不会更改checked属性。

答案 2 :(得分:2)

复选框的选中性反映在对象属性checked中。它可以由DOM属性checked设置,但方向是单向的:当对象的属性更改时,DOM属性不会更新。 :checked是一个专用的伪选择器,它将检查对象的属性; [checked]是一个检查DOM属性是否存在的选择器。

答案 3 :(得分:0)

请参阅jQuery属性页上对checked属性的讨论:

http://api.jquery.com/prop/

答案 4 :(得分:0)

检查此http://jsfiddle.net/2QZvU/5/

必须是* [:checked]

正如Matt所说,checked是属性而不是属性