checkbox属性checked="checked"已有,但却不显示打勾的解决办法
在做权限管理的时候,做了一个功能,就是当勾选栏目,把所有的权限全勾上。刚开始使用了如下代码:
function check(id,check) { if (check) { $("." + id).find("input[type='checkbox']").attr("checked", true); } else { $("." + id).find("input[type='checkbox']").attr("checked", false); } }
第一遍勾选和取消是有效的,但是第二遍以后就没反应了,查看了属性,发现checked属性一直存在,但是没显示勾。就考虑移除checked属性看看。
function check(id,check) { if (check) { $("." + id).find("input[type='checkbox']").attr("checked", true); } else { $("." + id).find("input[type='checkbox']").removeAttr("checked"); } }
这次看到checked属性勾上有了,取消就没了,可是问题还是没解决,还是第二遍以后就没反应了。看Jquery手册上说1.6以下版本在IE6使用JQuery的removeAttr方法删除disabled是无效的。解决的方法就是使用$("XX").prop("disabled",false);课时我都用1.10的版本了,不管那么多了,死马当活马医就用这个方法试试。
function check(id,check) { if (check) { $("." + id).find("input[type='checkbox']").prop("checked", true); } else { $("." + id).find("input[type='checkbox']").removeAttr("checked"); } }
写成这样,问题解决,我估计手册上说的修复只修复了一遍,之后还是会出问题,所以最保险的还是用prop。
jq提供新的方法“prop”来获取这些属性,就是来解决这个问题的,以前我们使用attr获取checked属性时返回"checked"和"",现在使用prop方法获取属性则统一返回true和false。
那么,什么时候使用attr(),什么时候使用prop()?
1.添加属性名称该属性就会生效应该使用prop();
2.是有true,false两个属性使用prop();
3.其他则使用attr();
项目中jquery升级的时候大家要注意这点!
以下是官方建议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() ) | √ |