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 Ajax方法调用 Asp.Net WebService 的详细实例代码
Apr 27 Javascript
js调用后台servlet方法实例
Jun 09 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
Jul 28 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
May 14 Javascript
Javascript 引擎工作机制详解
Nov 30 Javascript
jQuery+HTML5实现弹出创意搜索框层
Dec 29 Javascript
JavaScript数据结构学习之数组、栈与队列
May 02 Javascript
vue项目如何刷新当前页面的方法
May 18 Javascript
js实现简单选项卡功能
Mar 23 Javascript
在Create React App中使用CSS Modules的方法示例
Jan 15 Javascript
在JavaScript中使用严格模式(Strict Mode)
Jun 13 Javascript
JavaScript或jQuery 获取option value值方法解析
May 12 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 和 MySQL 基础教程(二)
2006/10/09 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
玩转方法:call和apply
2014/05/08 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
javascript中的this详解
2014/12/08 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
利用aardio给python编写图形界面
2017/08/21 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
护士毕业生自我鉴定
2014/02/08 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript