jquery prop和attr方法学习笔记

文章参考

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>

结果如图:

jquery prop和attr方法学习笔记

关于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>

相关推荐