jquery判断复选框选中状态以及区分attr和prop


Posted in Javascript onDecember 18, 2015

最近项目中需要用jquery判断input里checkbox是否被选中,发现用attr()获取不到复选框改变后的状态,最后查资料发现jQuery 1.6以后新增加了prop()方法,借用官方的一段描述就是:

The difference between attributes and properties can be important in specific situations. Before jQuery 1.6, the .attr() method sometimes took property values into account when retrieving some attributes, which could cause inconsistent behavior. As of jQuery 1.6, the .prop() method provides a way to explicitly retrieve property values, while .attr() retrieves attributes.
上面翻译过来大概就是:prop()处理来自节点对象自带的属性,它包含了很多原生的property;而attr()来自对象的attributes,可能是我们在元素节点上添加属性节点才会有的。当然,前面的翻译仅代表本人观点,如有错误,可以提出来~~

简单的来说就是:

对于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()方法代码:

<!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>

上面这段程序的测试结果是:

jquery判断复选框选中状态以及区分attr和prop

从动态图可以看出来,用attr()获取不到用户选中的状态,它只返回表单的初始值。

 再来看一段用prop()方法代码:

<!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>

上面这段程序的测试结果是:

jquery判断复选框选中状态以及区分attr和prop

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

因此我总结的差别就是:property记录的值会按照用户操作实时更新,而attribute记录的都是初始值,仅代表本人观点。

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
Jul 26 Javascript
JS按位非(~)运算符与~~运算符的理解分析
Jul 31 Javascript
Javascript数组的排序 sort()方法和reverse()方法
Jun 04 Javascript
window.print打印指定div指定网页指定区域的方法
Aug 04 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
JavaScript中动态向表格添加数据
Jan 24 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
JS中type=&quot;button&quot;和type=&quot;submit&quot;的区别
Jul 04 Javascript
JavaScript实现短暂提示框功能
Apr 04 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
Aug 06 Javascript
关于Vue中的options选项
Mar 22 Vue.js
js判断移动端是否安装某款app的多种方法
Dec 18 #Javascript
javascript实现保留两位小数的多种方法
Dec 18 #Javascript
原生js实现图片轮播特效
Dec 18 #Javascript
js表单中选择框值的获取及表单的序列化
Dec 17 #Javascript
浏览器兼容性问题大汇总
Dec 17 #Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
Dec 17 #Javascript
js调出上下文菜单的实例
Dec 17 #Javascript
You might like
PHP学习之PHP变量
2006/10/09 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
php 获取xml接口数据的处理方法
2018/05/31 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
javascript 节点排序 2
2011/01/31 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Python实现EM算法实例代码
2020/10/04 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
奥巴马竞选演讲稿
2014/05/15 职场文书
廉洁教育学习材料
2014/05/19 职场文书
办理房产过户的委托书
2014/09/14 职场文书
三方股东合作协议书
2014/10/28 职场文书
中层干部考核评语
2015/01/04 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
大班上学期个人总结
2015/02/13 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技