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的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
动态创建script标签实现跨域资源访问的方法介绍
Feb 28 Javascript
让html页面不缓存js的实现方法
Oct 31 Javascript
jQuery中children()方法用法实例
Jan 07 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
jQuery Checkbox 全选 反选的简单实例
Nov 29 Javascript
利用ES6语法重构React组件详解
Mar 02 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
Apr 18 Javascript
Vue.directive使用注意(小结)
Aug 31 Javascript
jQuery常见的遍历DOM操作详解
Sep 05 jQuery
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
Mar 04 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
Mar 31 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
PHP 防注入函数(格式化数据)
2011/08/08 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
python实现海螺图片的方法示例
2019/05/12 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
python3让print输出不换行的方法
2020/08/24 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
高中运动会入场词
2014/02/14 职场文书
名企HR怎样看待求职信
2014/02/23 职场文书
经典英文广告词
2014/03/18 职场文书
颁奖典礼主持词
2014/03/25 职场文书
慈善晚会策划方案
2014/05/14 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
教师创先争优承诺书
2015/04/27 职场文书
检讨书范文
2019/04/16 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python