原链接 http://www.jb51.net/article/76588.htm
大家都知道有的浏览器只要写disabled,checked就可以了,而有的要写成disabled = "disabled",checked="checked",比如用attr("checked")获取checkbox的checked属性时选中的时候可以取到值,值为"checked"但没选中获取值就是undefined。
jq提供新的方法“prop”来获取这些属性,就是来解决这个问题的,以前我们使用attr获取checked属性时返回"checked"和"",现在使用prop方法获取属性则统一返回true和false。
那么,什么时候使用attr(),什么时候使用prop()?1.添加属性名称该属性就会生效应该使用prop();2.是有true,false两个属性使用prop();3.其他则使用attr();
简单的来说就是:
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
上面的描述也许有点模糊,引用一些大神的博客内容加上我的测试,举几个例子就知道了。
第一个例子:元素的固有属性以及自定义属性说明
<a href="http://www.baidu.com" target="_self" class="btn">百度</a>
这个例子里<a>元素的DOM属性有“href、target和class",这些属性就是<a>元素本身就带有的属性,也是W3C标准里就包含有这几个属性,或者说在IDE里能够智能提示出的属性,这些就叫做固有属性。处理这些属性时,建议使用prop方法。
<a href="#" id="link1" action="delete">删除</a>
这个例子里<a>元素的DOM属性有“href、id和action”,很明显,前两个是固有属性,而后面一个“action”属性是我们自己自定义上去的,<a>元素本身是没有这个属性的。这种就是自定义的DOM属性。处理这些属性时,建议使用attr方法。使用prop方法取值和设置属性值时,都会返回undefined值。
第二个例子:prop()与attr()在表单应用上的区别
先来看一段用attr()方法代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<!DOCTYPE
html>
< html >
< head >
< meta charset = "utf-8" />
< title >
attr() vs prop()</ title >
</ head >
< body >
< h3 >用attr()判断是否选中</ h3 >
< input type = "checkbox" id = "input01" />我是第一个复选框A< br />
< input type = "checkbox" id = "input02" checked = "checked" />我是第二个复选框B< br />
< input type = "button" id = "button01" value = "获取A的checked状态" />
< input type = "button" id = "button02" value = "获取B的checked状态" />
< script src = "js/jquery-1.11.0.js" type = "text/javascript" charset = "utf-8" ></ script >
< script type = "text/javascript" >
$(function(){
$("#button01").click(function(){
var
$state01=$("#input01").attr("checked");
alert($state01);
})
$("#button02").click(function(){
var
$state02=$("#input02").attr("checked");
alert($state02);
})
})
</ script >
</ body >
</ html >
|
上面这段程序的测试结果是:

从动态图可以看出来,用attr()获取不到用户选中的状态,它只返回表单的初始值。而且若没有明确有checked属性,它返回undefined!
再来看一段用prop()方法代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<!DOCTYPE
html>
< html >
< head >
< meta charset = "utf-8" />
< title >
attr() vs prop()</ title >
</ head >
< body >
< h3 >用prop()判断是否选中</ h3 >
< input type = "checkbox" id = "input01" />我是第一个复选框A< br />
< input type = "checkbox" id = "input02" checked = "checked" />我是第二个复选框B< br />
< input type = "button" id = "button01" value = "获取A的checked状态" />
< input type = "button" id = "button02" value = "获取B的checked状态" />
< script src = "js/jquery-1.11.0.js" type = "text/javascript" charset = "utf-8" ></ script >
< script type = "text/javascript" >
$(function(){
$("#button01").click(function(){
var
$state01=$("#input01").prop("checked");
alert($state01);
})
$("#button02").click(function(){
var
$state02=$("#input02").prop("checked");
alert($state02);
})
})
</ script >
</ body >
</ html >
|
上面这段程序的测试结果是:

从动态图可以看出来,用prop()可以实时获取用户的选中与取消操作状态。