Javascript 为什么*[checked]与单个选中的输入框不匹配?
假设我有一个id为“test”的复选框,它位于加载了jQuery1.5.2的页面上Javascript 为什么*[checked]与单个选中的输入框不匹配?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,假设我有一个id为“test”的复选框,它位于加载了jQuery1.5.2的页面上 <input id="test" type="checkbox"/> 现在,如果我单击复选框将其设置为checked状态 为什么$(“#test”).is(“:checked”)返回true和$(“#test”).is(“*[checked]”)返回false 这里有一个是一个选择器,它选择当前使用已检查的属性而不是属性检查的元素-换句话说,“如果元素具有已检查的属性,则选择它” 如果要检查复选
<input id="test" type="checkbox"/>
现在,如果我单击复选框将其设置为checked
状态
为什么$(“#test”).is(“:checked”)
返回true
和$(“#test”).is(“*[checked]”)返回false
这里有一个是一个选择器,它选择当前使用已检查的
属性而不是属性检查的元素-换句话说,“如果元素具有已检查的属性,则选择它”
如果要检查复选框是否选中,则必须使用
用法示例:
if($('#test').is(':checked'))
{
return true;
}
对于jQuery 1.6及更高版本,出于性能原因,您可以使用该函数
if($('#test').prop('checked'))
{
return true;
}
因为选中的不是input
元素的属性。这是一种财产。您的*[checked]
选择器检查它是否具有checked
属性,该属性在元素上永远不存在。您可以将checked=“checked”
添加到input
元素,该元素设置该对象的checked
属性,但即使取消选中该框,该属性也将始终存在。这是因为选中和取消选中只会更改复选框的checked
属性,而不会更改checked
属性。请参阅jQuery属性页上有关选中属性的讨论:
检查此项
必须是*[:选中]
正如Matt所说,checked是一个属性而不是一个属性,复选框的检查性反映在对象属性checked
中。它可以通过选中的DOM属性进行设置,但方向是单向的:当对象的属性更改时,DOM属性不会更新:checked
是一个专用的伪选择器,用于检查对象的属性[checked]
是一个选择器,用于检查DOM属性是否存在。OP使用的是jQuery 1.5.2,而不是1.6+。是的,该页面讨论了1.6之前和之后的内容,但它没有回答OP问题。这可能是另一个问题,但在这种情况下它们似乎是相同的:请参阅后续问题