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时无响应数据的解决方法
May 25 Javascript
javascript中window.event事件用法详解
Dec 11 Javascript
js实现的点击div区域外隐藏div区域
Jun 30 Javascript
js用Date对象的setDate()函数对日期进行加减操作
Sep 18 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
Aug 12 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
js移动焦点到最后位置的简单方法
Nov 25 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 Javascript
Javascript 实现放大镜效果实例详解
Dec 03 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
Nov 24 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 Javascript
javascript实现页面的实时时钟显示示例
Aug 06 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
网站加速 PHP 缓冲的免费实现方法
2006/10/09 PHP
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
PHP图片加水印实现方法
2016/05/06 PHP
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
使用AngularJS中的SCE来防止XSS攻击的方法
2015/06/18 Javascript
简述AngularJS相关的一些编程思想
2015/06/23 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
2017/07/23 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
Python线程指南详细介绍
2017/01/05 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
什么是Remote Module
2016/06/10 面试题
中专三年学习的个人自我评价
2013/12/12 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
2015年试用期工作总结
2014/12/12 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
Linux安装apache服务器的配置过程
2021/11/27 Servers
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
zabbix配置nginx监控的实现
2022/05/25 Servers