文章参考
http://www.365mini.com/page/jquery-attr-vs-prop.htm
http://www.zhangyunling.com/?p=38
问题1:jquery如何判断type="checkbox"是否被选中
问题2:如何设置type="checkbox"是否选中
知识点一 :属性值 VS 状态值
先看看下面的例子
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>attr demo</title>
<style>
p {
margin: 20px 0 0;
}
b {
color: blue;
}
</style>
<script src="http://www.zhangyunling.com/study/jquery/jquery.js"></script>
</head>
<body>
<input id="check1" type="checkbox" checked="checked">
<label for="check1">Check me</label>
<p></p>
<script>
$( "input" )
.change(function() {
var $input = $( this );
$( "p" ).html( ".attr( 'checked' ): <b>" + $input.attr( "checked" ) + "</b><br>" +
".prop( 'checked' ): <b>" + $input.prop( "checked" ) + "</b><br>" +
".is( ':checked' ): <b>" + $input.is( ":checked" ) + "</b>" );
})
.change();
</script>
</body>
</html>
结果如图:
关于checked的属性(明文显示在控件的属性),最重要的概念就是你要记住,它跟checked的状态值是毫无关系的,设置checked = "checked"或者checked = "true"等属性设置,和它的状态值true/false是无关的。而这里的属性值,事实上只是和defaultChecked的状态值有关,并且只能用来设置checkbox的初始的值。checked的属性值并不会随着checkbox的的状态变化而变化,可是checkbox的状态值却会。因此,为了能更好的跨浏览器的兼容,决定了checkbox的checked的状态要使用状态值进行处理。
attribute的checked、selected、disabled就是表示该属性初始状态的值
property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。
attr()与prop()函数的区别
简单理解:
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
深入理解:
attr()函数主要依赖的是Element对象的getAttribute()和setAttribute()两个方法。
prop()函数主要依赖的则是JS中原生的对象属性获取和设置方式。
properties就是浏览器用来记录当前值的东西。正常情况下,properties反映它们相应的attributes(如果存在的话)。但这并不是boolean attriubutes的情况。当用户点击一个checkbox元素或选中一个select元素的一个option时,boolean properties保持最新。但相应的boolean attributes是不一样的,正如上面所述,它们仅被浏览器用来保存初始值。
此外,虽然prop()针对的是DOM元素的property,而不是元素节点的attribute。不过DOM元素某些属性的更改也会影响到元素节点上对应的属性。例如,property的id对应attribute的id,property的className对应attribute的class。
解答:
如何判断input="checkbox"控件是否被选中(下面三种方式,推荐第二种)
if ( elem.checked ) if ( $(elem).prop("checked") ) if ( $(elem).is(":checked") )
设置type="checkbox"是否选中
<input id="check1" type="checkbox" checked="checked">
或者
<input id="check1" type="checkbox">
<script>
$( "input").prop("checked",true);
</script>
<input id="chk1" type="checkbox" />是否可见
<input id="chk2" type="checkbox" checked="checked" />是否可见
$("#chk1").prop("checked") == false
$("#chk2").prop("checked") == true
//如果上面使用attr方法,则会出现:
$("#chk1").attr("checked") == undefined
$("#chk2").attr("checked") == "checked"
<body>
<input type="checkbox" id="checkbox1">
<input type="checkbox" id="checkbox2" checked>
<input type="radio" id="radio1" checked>
<input type="radio" id="radio2" >
<input type="text" readonly id="text1">
<input type="text" id="text2">
</body>
</html>
<script>
$(function(){
console.info($("#checkbox1").prop("checked"));
console.info($("#checkbox2").prop("checked"));
console.info($("#radio1").prop("checked"));
console.info($("#radio2").prop("checked"));
console.info($("#text1").prop("readonly"));
console.info($("#text2").prop("readonly"));
});
</script>