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 实现GridView异步排序、分页的代码
Feb 06 Javascript
JavaScript中关于indexOf的使用方法与问题小结
Aug 05 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
实现React单页应用的方法详解
Aug 02 Javascript
jQuery.Validate表单验证插件的使用示例详解
Jan 04 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
vue购物车插件编写代码
Nov 27 Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 Javascript
关于vue里页面的缓存详解
Nov 04 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
Nov 06 Javascript
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
PHP4实际应用经验篇(4)
2006/10/09 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
解决python2.7 查询mysql时出现中文乱码
2016/10/09 Python
Python简单读取json文件功能示例
2017/11/30 Python
opencv与numpy的图像基本操作
2019/03/08 Python
Python内置类型性能分析过程实例
2020/01/29 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
linux面试相关问题
2012/08/11 面试题
软件测试工程师面试问题精选
2016/10/28 面试题
自考生毕业自我鉴定
2013/10/10 职场文书
化学实验员岗位职责
2013/12/28 职场文书
班级团队活动方案
2014/08/14 职场文书
看雷锋电影观后感
2015/06/10 职场文书
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers
如何基于python实现单目三维重建详解
2022/06/25 Python