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 textarea自动增高并隐藏滚动条
Dec 16 Javascript
JavaScript this调用规则说明
Mar 08 Javascript
jQuery 幻灯片插件(带缩略图功能)
Jan 24 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
js简单实现让文本框内容逐个字的显示出来
Oct 22 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
JQuery显示隐藏页面元素的方法总结
Apr 16 Javascript
JS实现可调整倒计时间代码分享
Aug 18 Javascript
vue项目中用cdn优化的方法
Jan 03 Javascript
JS实现获取word文档内容并输出显示到html页面示例
Jun 23 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 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实现多服务器session共享之NFS共享的方法
2007/03/16 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
jQuery学习笔记之jQuery中的$
2015/01/19 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
python创建关联数组(字典)的方法
2015/05/04 Python
Django保护敏感信息的方法示例
2019/05/09 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
一些Solaris面试题
2015/12/22 面试题
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
产品工艺师的岗位职责
2013/11/15 职场文书
档案管理员岗位职责
2013/12/01 职场文书
车间工艺员岗位职责
2013/12/09 职场文书
高中的职业生涯规划书
2013/12/28 职场文书
最新大学职业规划书范文
2013/12/30 职场文书
公司会计岗位职责
2014/02/13 职场文书
小学评语大全
2014/04/22 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技