2011-12-29 40 views
3

假设我有一个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

+0

请参阅下面的问题http://stackoverflow.com/questions/8673570/why-does-checked-act-like-checked-when-using-jquerys-filter-method – 2011-12-29 21:18:43

回答

8

[checked]是挑选了当前检查元素checked属性没有属性选择 - 换句话说,“如果元素拥有checked属性,把它捡起来。”

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

用法示例:

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

使用jQuery 1.6以上可用于性能原因.prop()功能。

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

这可能需要是另一个问题,但在这种情况下它们似乎是相同的:http://jsfiddle.net/2QZvU/9/ – 2011-12-29 20:57:24

2

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

0

见检查属性的jQuery的属性页上的讨论:

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

+0

OP使用jQuery 1.5.2,而不是1.6+。 – MacMac 2011-12-29 20:49:54

+0

是的,该页面讨论前后两个1.6 – 2011-12-29 20:50:55

+0

但它不回答OP问题。 – MacMac 2011-12-29 20:52:26

2

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

相关问题