jquery attr prop checkbox已有checked=checked但不显示勾选问题

最近在做项目的过程中碰到了这样的一个问题:在使用bootstrap模态框的过程中,在模态框中有一个checkbox标签,一开始是为选中的,当点击触发模态框按钮,选中chcekbox时,会显示勾选,这个时候将选中的状态缓存起来,然后点击模态框中的关闭按钮,再次点击触发模态框按钮弹出模态框,这个时候问题出现了:

checkbox标签已有checked=checked但是不显示勾选,查看图片:

网上也查过有解决方案,就是将   $("...").attr("checked", true)改为$("...").prop("checked", true),问题解决,但是,问题是解决了,那么原因是出现在哪里呢?

首先来了解下 jquey中的 attr()函数和prop()函数,attr()是处理 attribute的值的,而prop()是处理 property 的值的 ,jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值时,会返回 property 的值,这就导致了结果的不一致。从 jQuery 1.6 开始, .prop()方法 方法返回 property 的值,而 .attr() 方法返回 attributes 的值,那么归根结底,就是在处理 attribute 和 property。

很多attribute节点有一个相应的property属性,因而attribute和property很容易被混淆在一起,如某个div元素中的id和class既是attribute也有property,不管哪种方式都可以访问和修改,但是对于自定义的attribute节点,或者自定义property,两者就没有关系了(但是在IE6-7中,两者还是一样的,好奇葩的,但愿我们都能早日抛弃IE8以下的),需要注意的是,对于checked特性(attribute)不是对应它checked属性(property),attribute实际对应的是defaultChecked属性,而且仅用于设置复选框最初的值,checked的attribute不会因为复选框的状态而改变,而checked的property会因为复选框的状态而改变,所以在.attr()函数中,就算设置成了.attr("checked", true),也只是用来存储默认或者选中属性的默认值,却并不改变该复选框被选中和选中,这就是为什么   checkbox标签已有checked=checked但是不显示勾选 的原因所在

时间: 2024-10-19 19:25:02

jquery attr prop checkbox已有checked=checked但不显示勾选问题的相关文章

jquery,attr,prop,checkbox标签已有checked=checked但是不显示勾选

最近在做项目的过程中碰到了这样的一个问题:在使用bootstrap模态框的过程中,在模态框中有一个checkbox标签,一开始是为选中的,当点击触发模态框按钮,选中chcekbox时,会显示勾选,这个时候将选中的状态缓存起来,然后点击模态框中的关闭按钮,再次点击触发模态框按钮弹出模态框,这个时候问题出现了:         checkbox标签已有checked=checked但是不显示勾选,网上也查过有解决方案,就是将   $("...").attr("checked&qu

checkbox标签已有checked=checked属性但是不显示勾选

点击全选按钮,选中下面的列表,再次点击取消选择. 第一次的使用的方法是$("input[name=xxx]").attr('checked',true); 但是往往刷新页面第一次点击正常,再次点击就会出现问题,html代码中是有checked=“checked”但是却不能选中 后面改成 1 $(document).delegate('#btnCheckedAll', 'click', function() { 2 if (this.checked) { 3 $('.courselist

checkbox标签已有checked=checked但是不显示勾选

小问题苦恼了很久. 我开始是通过 $("input[name=xxx]").attr('checked',true); 来设置是否选中的,各种不好用,明明页面的代码已经是checked=checked了,就是不显示勾选. 百思不得其解... 后来在网上找到了答案 if(dataBack.remind){     $("#isremind").prop("checked",true); }else{     $("#isremind&qu

jQuery .attr() .prop() .data()区别及全选等问题

DOM的attribute和property 今天讲一个JS的小话题,就是DOM节点的attribute和property的区别,这个点看起来很小,其实背后别有洞天.如果面试一个前端,听他讲讲对这个问题的理解,基本能分辨是不是菜鸟.下面的内容请各位细心体会. 页面有一个INPUT输入框   这个比较简单,没什么好说的,两个值都是’1′.现在我把输入框的值改成100,然后重新取一遍值: 为什么两个值不同了?这就是attribute和property在作怪. Attibute 这 个INPUT节点有

JQUERY attr prop 的区别 一个已经被淘汰

在做jquery 全选 全不选的项目中, 1..prop( propertyName ) 获取匹配集合中第一个元素的Property的值 2. .prop( propertyName, value ) .prop( map ) .prop( propertyName, function(index, oldPropertyValue) ) 给匹配元素集合设定一个或多个属性 .prop()和 .attr()区别 下面是关于jQuery1.6和1.6.1中Attributes模块变化的描述,以及.a

jQuery attr() prop() data()用法及区别

.attr(),此方法从jq1.0开始一直存在,官方文档写的作用是读/写DOM的attribute值,其实1.6之前有时候是attribute,有时候又是property..prop(),此方法jq1.6引入,读/写DOM的property..data(),此方法在jq1.2.3引入,作用是把任意的值读取/存储到DOM元素对应的jq对象上.从性能上对比,.prop() > .data() > .attr(),不同浏览器不同版本.data()和.attr()的性能关系有差异,不过.prop()总

firefox(火狐)下 js中设置checkbox属性checked="checked"已有,但复选框却不显示勾选的原因

刚看到问题时以为是浏览器兼容性的原因,ie.google都能正常显示. 网上查询之后发现是jQuery的attr()方法用的不恰当. jQuery1.6之前使用attr()可以修改 ,从jQuery 1.6开始,attr()方法返回undefined尚未设置的属性,对于设置checked这种类型的属性使用prop()来设置. jquey官网给出的两个方法的说明: 获取匹配元素集中第一个元素的属性值,或为每个匹配元素设置一个或多个属性. 并指出检索和修改DOM属性,如checked,selecte

jquery attr处理checkbox / select 等表单元素时的坑

先上html结构 <body> <form action=""> <input type="checkbox" id="checkedAll">全选/全不选<br> <input type="checkbox" name="items" value="足球">足球 <input type="checkbox&qu

jquery attr() &amp; prop()

version: 1.9.1 Attr 1 attr: function( elem, name, value ) { 2 var hooks, notxml, ret, 3 nType = elem.nodeType; 4 5 // don't get/set attributes on text, comment and attribute nodes 6 if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { 7 return