最近在写一个关于checkbox全选与取消全选的优化方法时,看到很多高手用到了.prop()。
于是在jquery的帮助文档查了一下,才知道这是在jquery 1.6.1中新加的方法,用来设置属性。但已经有了attr(),为何还要加入prop()呢?于是查阅了一下相关文档,总结一下。
下面主要写一下它们在何种情况下被使用: 一、checked,selected,readonly和disabled在1.6.1中和1.6之前的处理相同,也就是说还是直接用attr()即可,如
          $(“:checkbox”).attr(“checked”, true);
$(“option”).attr(“selected”, true);
$(“input”).attr(“readonly”, true);
$(“input”).attr(“disabled”, true);
    甚至是这样的代码:
 
          if ( $(“:checkbox”).attr(“checked”) ) { /* Do something */ } 
    都是可以在1.6以上的jquery中正常运行的,但有一些bug,在下面讲到。

   二、下面的.attr()的例子,虽然在jQuery 1.61之前的版本中能正常工作,但是现在必须使用.prop()方法代替:
     
                 .attr                                     .prop
        $(window).attr() $(window).prop()
        $(document).attr() $(document).prop()
       $(':checkbox').attr('checked',true) $(':checkbox').prop('checked',true)
       $('option').attr('selected',true) $('option').prop('selected',true)
  首先,window或document中使用.attr()方法在jQuery1.6中不能正常运行,因为window和document中不能有attributes。它们包含properties(比如:location或readyState),必须使用.prop()方法操作或简单地使用javascript原生的方法。 在jQuery1.6.1中,window和document中使用.attr()将被自动转成使用.prop(还没试过)。其次,checked,selected和前面提到的其它boolean attributes,因为这些attributes和其相应的properties之间的特殊关系而被特殊对待。通常,attribute 就是以下html代码中看到的,如: 
              <input type=”checkbox” checked=”checked”>
但它仅表示checked属性在页面加载的时候被设置成默认值或初始值,而不管checkbox元素是否被选中。 而通常 properties 是一个浏览器用来记录当前属性值的东西。正常情况下,properties反映它们相应的attributes。
所以,当用户点击一个checkbox元素或选中一个select元素的一个option时,使得properties保持最新,但对应的attributes却不一定,它仅被浏览器用来保存该属性的初始值。
在jQuery1.6中,如果使用下面的方法设置checked:
              $(“:checkbox”).attr(“checked”, true);
将不会检查checkbox元素,因为它是用来设置属性的,但是设置的都是初始值。
综合,我觉得,在设置这些prioerties时,使用prop(),而在获取初始化的值是使用attr()。
下面是jQuery1.6.1支持的使用.attr()动态地取得和设置boolean attributes/properties的完整列表: autofocus, autoplay, async, checked, controls, defer, disabled, hidden, loop, multiple, open, readonly, required, scoped, selected 当然,代码仍然可以在jQuery1.6.1中正常运行,还是建议使用.prop()方法来设置这些boolean attributes/properties.

最新文章

  1. .Net Core WebAPI 基于Task的同步&amp;异步编程快速入门
  2. runv nslistener源码分析
  3. 《编写高质量代码:改善C#程序的157个建议》源码下载
  4. android ndk编译x264开源(用于android的ffmpeg中进行软编码)
  5. .gitignore 配置
  6. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
  7. Java基础:多线程
  8. 【转】Delphi的消息对话框
  9. nil和NULL
  10. 解决“重新安装vmware-tools”灰色而无法安装的问题
  11. Unity 白猫操作小实例
  12. QF——网络之网络请求的几种方式,图片缓存
  13. SSH远程连接时间设置
  14. Redis 部署主从哨兵 C#使用,实现自动获取redis缓存 实例1
  15. CentOS 挂载 cdrom, iso文件作为源
  16. [CTSC2008]网络管理 [整体二分]
  17. WiFi-ESP8266入门http(1)-建立服务器,直接发送网
  18. django中文学习资料
  19. RabbitMQ(四): rabbitmq 的消息确认机制(事务+confirm)
  20. Java Service Wrapper简介与使用(转)

热门文章

  1. 近 100 个 Linux 常用命令大全
  2. 【转】Mac访问Windows共享文件夹
  3. 自定义input file样式
  4. Heritrix源码分析(十五)
  5. [置顶] SQL注入问题
  6. android中发送邮件
  7. NSData的一些用法
  8. Netmon: A light-weight network monitor for Windows
  9. 多线程下载 HttpURLConnection
  10. Panel( 面板) 组件 上