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 相关文章推荐
Prototype使用指南之form.js
Jan 10 Javascript
Javascript数组的排序 sort()方法和reverse()方法
Jun 04 Javascript
jquery load事件(callback/data)使用方法及注意事项
Feb 06 Javascript
jQuery实现统计输入文字个数的方法
Mar 11 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
JavaScript中的Function函数
Aug 27 Javascript
AngularJS自定义服务与fliter的混合使用
Nov 24 Javascript
jQuery EasyUi 验证功能实例解析
Jan 06 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
AngularJS实时获取并显示密码的方法
Feb 06 Javascript
vue-router的使用方法及含参数的配置方法
Nov 13 Javascript
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
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 读取文件头判断文件类型的实现代码
2013/08/05 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
ionic3 懒加载
2017/08/16 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
构建一个JavaScript插件系统
2020/10/20 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
会计毕业生自荐信
2013/11/21 职场文书
保密普查工作实施方案
2014/02/25 职场文书
家长对孩子的感言
2014/03/10 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL