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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
js网页版计算器的简单实现
Jul 02 Javascript
Bootstrap零基础入门教程(三)
Jul 18 Javascript
浅谈js中StringBuffer类的实现方法及使用
Sep 02 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
Nov 18 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Dec 14 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
AngularJS 的$timeout服务示例代码
Sep 21 Javascript
AngularJS路由删除#符号解决的办法
Sep 28 Javascript
Vue二次封装axios为插件使用详解
May 21 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
php 可变函数使用小结
2018/06/12 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
python聊天程序实例代码分享
2013/11/18 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
八一演出活动方案
2014/02/03 职场文书
办公室秘书岗位职责范本
2014/02/11 职场文书
竞选团支书演讲稿
2014/04/28 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
教师学期个人总结
2015/02/11 职场文书
工作态度检讨书范文
2015/05/06 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书