从一个bug说jquery中的attr和prop

为了方便描述,将问题简化如下:

先上代码

<form>
<input type="checkbox">iqiyi</input>
<input type="checkbox" checked="checked">letv</input>
</form>
<button type>showStatus</button> 

<script>
$("button").click(function(){
    var list = $("form input");
    for (var i=0; i<list.length; i++){
        console.log('input ' + i + ':' + $(list[i]).attr('checked'));
    }
})
</script>

对应页面对图1所示

图1

代码功能很简单,点击"showStatus", 获取每个checkbox的状态。注意,这里获取状态值时,我们使用了jquery的attr函数。

不对页面中的checkbox进行操作,直接点击"showStatus", 得到结果:

input 0:undefined
input 1:checked

看起来没啥问题。

对页面进行操作,使之变成:

图2

再用"showStatus"看结果:

input 0:undefined
input 1:checked

居然没有变化!what‘s wrong!莫非jquery的attr有bug!?

几经查询,发现不是attr有问题,是我用错了api。应该使用prop, 而不是attr。

将$(list[i]).attr(‘checked‘)替换为$(list[i]).prop(‘checked‘),相应图1,图2操作得到的结果是

input 0:false
input 1:true

input 0:true
input 1:false

当checkedbox被勾选,得到true,未被选得到false,会随用户操作动态变化。true,false的返回值也更易使用。

附官方建议attr(),prop()的使用:

Attribute/Property .attr() .prop()
accesskey
align
async
autofocus
checked
class
contenteditable
draggable
href
id
label
location ( i.e. window.location )
multiple
readOnly
rel
selected
src
tabindex
title
type
width ( if needed over .width() )
时间: 2024-10-15 14:20:39

从一个bug说jquery中的attr和prop的相关文章

jquery中的attr()和prop()

jQuery1.6中新添加了一个prop方法,看起来和用起来都和attr方法一样,这两个方法有什么区别呢?这要从HTMl 的attribute与property区别说起,attr与prop正是这两个东西的缩写. attribute与property attribute和property都可以翻译为属性,为了以示区别,通常把这两个单词翻译为属性与特性. <div id="test">Click Here</div> 上面这段HTML语句中有三个节点,分别是Elem

关于面试jquery中的 .attr() 和 .prop()的区别联系

目测很多人都不太清楚这个,我之前也是,知道这两个东西有点区别,但是却说不清楚,那么这里,我来详细的讲一下 大家都知道,html标签可以在 <> 尖括号里面直接写属性, 例如 <img src="fhc.jpg" alt="hello">, 那么在jquery中,要获取这个图片的地址该怎么做的呢 $('img').attr('src') 或者 $('img').prop('src') 都可以,好像没什么区别 但是有一点大家要注意, 在 html

JQuery中关于attr()、prop()两者之间的区别

attr:设置或返回被元素则值 prop:获取在匹配的元素集中的第一个元素的属性值. 区别: 1. prop 如果获取多个被选元素那么只返回第一个被选元素的值: 2.根据JQ源码(可自行查看),attr 是通过原生JS中setAttribute()方法设置或修改:prop则是通过document.getElementById(ele)[name]的方法设置或修改 所以,获取标签的属性,如若标签自带的属性则使用prop方法会来的快些,attr则比较适用于我们自己的设置的属性 原文地址:https:

Jquery 中 $(&#39;obj&#39;).attr(&#39;checked&#39;,true)失效的几种解决方案

1.$('obj').prop('checked',true) 2. $(':checkbox').each(function(){ this.checked=true; }) 为什么:attr为失效?因为checked属于为原型对象的属性.而attr在remove原型对象时会出错.原型对象指的是自身自带的,无法移除.prop会忽略这个错误.而attr操作的是普通非原型对象(可移除).js 的dom对象属性是可以随意增加的. Jquery 中 $('obj').attr('checked',tr

jquery获取自定义属性(attr和prop)实例介绍

jquery获取自定义属性(attr和prop)实例介绍 作者: 字体:[增加 减小] 类型:转载 jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式 $("form").attr("check"); $("form").prop("check"); 两种都可以,不过新版jquery推荐第二种,两个在其他

jquery中的attr方法

1.根据参数个数不同,作用不同 attr 作用:获取或者设置属性结点的值 可以传递一个参数也可以传递两个参数 如果传递一个参数代表获取属性结点的值 如果传递两个参数代表设置属性结点的值 注意:如果是获取,无论找到多少个元素都只会返回第一个元素指定的属性结点的值 如果是设置,找到多少个元素就会设置多少个元素的值 如果是设置,设置的属性结点不存在,系统会自动新增 removeAttr 作用:删除属性结点 注意:会删除所有找到元素指定的属性结点 那么是否有跟attr()相似的属性呢?jquery中va

jQuery属性选择器.attr()和.prop()两种方法

在判断表单单选框是否被选中时,通常会想到使用$('#checkbox').attr('checked')来判断,但在一些情况下,你会发现这种方法并不管用,得到的是undefined. 原来jQuery在1.6版本以后对属性选择器做了一些调整,分为.attr()和.prop()两种方法.为的是区分元素attributes和properties之间模棱两可的东西. 那么它们之间有什么区别呢? 官方的解释是: Attributes vs. Properties The difference betwe

jQuery中使用attribute,prop获取,设置input的checked值

1.prop方法获取.设置checked属性 当input控件checkbox设置了checked属性时,无论checked=""或 checked="checked",$(obj).prop("checked")的结果都是true: 当input控件checkbox没设置checked属性时,$(obj).prop("checked")的结果是false. 设置$("input[name='checkboxall'

jQuery中使用attribute,prop获取,设置input的checked值【转】

1.prop方法获取.设置checked属性 当input控件checkbox设置了checked属性时,无论checked=""或 checked="checked",$(obj).prop("checked")的结果都是true: 当input控件checkbox没设置checked属性时,$(obj).prop("checked")的结果是false. 设置$("input[name='checkboxall'