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 相关文章推荐
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
Dec 09 Javascript
js实现精确到秒的日期选择器完整实例
Apr 30 Javascript
AngularJs Scope详解及示例代码
Sep 01 Javascript
JS实现title标题栏文字不间断滚动显示效果
Sep 07 Javascript
express文件上传中间件Multer详解
Oct 24 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
Nov 03 Javascript
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
Jul 18 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 Javascript
微信小程序使用request网络请求操作实例
Dec 15 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
Python 自动化表单提交实例代码
2017/06/08 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
python读取xml文件方法解析
2020/08/04 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
大学毕业后的十年规划
2014/01/07 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
python基础之爬虫入门
2021/05/10 Python
python 常用的异步框架汇总整理
2021/06/18 Python
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android