原链接 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()可以实时获取用户的选中与取消操作状态。