$('#checkbox').attr('checked'); 返回的是checked或者是undefined,不是原来的true和false了,有关此问题的解决方法如下
在JQ1.6之前的版本,我们会这样写我们的代码:
- <input type='checkbox' id='cb'/>
- <script>
-
- var isChecked = $('#cb').attr('checked');
-
-
- $('#cb').attr('checked',true);
- </script>
这样写在JQ1.6之前完全没问题,可是当我们升级JQ1.6到更高的版本时,问题就来了,此时我们会发现:
$('#cb').attr('checked'); 返回的是checked或者是undefined,不是原来的true和false了。
并且checked属性在页面初始化的时候已经初始化好了,不会随着状态的改变而改变。所以如果checkbox一开始是选中的,那么返回的是checked,如果一开始没被选中,则返回的是undefined
- <input type='checkbox' id='cb'/>
- <script>
-
- var isChecked = $('#cb').prop('checked');
-
- var isChecked = $('#cb').is(":checked");
-
- $('#cb').prop('checked',true);
- </script>
分析了其中的原因,可以这样理解:
它将“属性”与“特性”做了区别,属性指的是“name,id”等等,特性指的是“selectedIndex, tagName, nodeName”等等。
JQ1.6之后,可以通过attr方法去获得属性,通过prop方法去获得特性
- $("#cb").attr("tagName");
- $("#cb").prop("tagName");
jQuery的:checked选择器用于匹配所有选中的表单域元素,将其封装为jQuery对象并返回。
选中的表单域是指具有checked属性的radio和checkbox表单域,以及具有selected属性的option标签。
注意::checked选择器不仅匹配具有checked属性的radio和checkbox,还可以匹配具有selected属性的option标签。网上有些文章说,:checked选择器只匹配具有checked属性的radio和checkbox是错误的。详情参见jQuery官方文档:checked Selector。
语法
jQuery( ":checked" )
返回值
返回封装了所有选中的表单域元素的jQuery对象。
如果找不到任何相应的匹配,则返回一个空的jQuery对象。
示例&说明
以下面这段HTML代码为例:
<div id="n1">
<form id="n2">
<label id="n3">CodePlayer</label>
<input id="n4" type="text" disabled="disabled" >
<input id="n5" type="checkbox" checked="checked" />
<input id="n6" type="checkbox" />
<input id="n7" type="radio" checked="checked" />
<input id="n8" type="radio" />
<button id="n9" type="button" disabled="disabled">Button</button>
<select id="n10">
<option id="n11" selected="selected">item1</option>
<option id="n12">item2</option>
</select>
</form>
</div>
现在,我们查找所有的提交按钮,即可编写如下jQuery代码:
// 选择了id分别为n5、n7、n11的3个元素
// :checked可以匹配"selected"的option
$(":checked");
如果你只希望匹配选中的radio和checkbox,请使用input:checked。
// 选择了id分别为n5、n7的两个元素
$("input:checked");
如果你只希望匹配选中的checkbox,请使用:checkbox:checked。radio也是同理。
// 选择了id为n5的一个元素
$(":checkbox:checked");