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 Tab选项卡效果代码改进版
Apr 01 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
Apr 25 Javascript
jquery 构造函数在表单提交过程中修改数据
May 25 Javascript
Javascript中判断一个值是否为undefined的方法详解
Sep 28 Javascript
Bootstrap select下拉联动(jQuery cxselect)
Jan 04 Javascript
jQuery中layer分页器的使用
Mar 13 Javascript
JS实现两周内自动登录功能
Mar 23 Javascript
JS变量及其作用域
Mar 29 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
使用JS监听键盘按下事件(keydown event)
Nov 07 Javascript
使用vue重构资讯页面的实例代码解析
Nov 26 Javascript
vue实现简单数据双向绑定
Apr 28 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
2014/04/09 PHP
php备份数据库类分享
2015/04/14 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
javascript工具库代码
2012/03/29 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
angular.bind使用心得
2015/10/26 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
js的三种继承方式详解
2017/01/21 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
详解VSCode配置启动Vue项目
2019/05/14 Javascript
Vue拖拽组件列表实现动态页面配置功能
2019/06/17 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
详解python中的装饰器
2018/07/10 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
项目经理聘任书
2014/03/29 职场文书
家长给学校的建议书
2014/05/15 职场文书
酒店员工培训方案
2014/06/02 职场文书
2014年度个人工作总结
2014/11/07 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
详解Redis主从复制实践
2021/05/19 Redis