复选框回显 选用prop()不用attr()小白知识
设置一个复选框回显示,使用attr()添加checked属性。但是在回显的过程中会使复选框出现混乱的情况有一些并没有回显。如果给他添加一个checked的class就会导致复选框不可点击这种做法是不对的,需要用prop替代
function updateCheckboxState(data, type) {
var elType = type ? ('#' + type + '_') : '#';
for (var x in data) {
if (data[x] == '1') {
$(elType + x).prop('checked', true);
// $(elType + x).addClass('checked');
} else {
$(elType + x).prop('checked', false);
// $(elType + x).removeClass('checked');
}
}
}
现在说一下为什么需要用prop()替代呢?使用attr()点击 checkbox,结果都是 undefined。
attr() prop()两者分别是获取/设置 attributes 和 properties 的方法
什么时候使用attr(),什么时候使用prop()?
根据官方的建议:具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()
attr() 里面,最关键的两行代码
elem.setAttribute( name, value + "" );
ret = elem.getAttribute( name );
很明显的看出来,使用的 DOM 的 API setAttribute() 和 getAttribute() 方法操作的属性元素节点。
prop() 里面,最关键的两行代码
return ( elem[ name ] = value );
return elem[ name ];
//可以理解为 document.getElementById(el)[name] = value,这是转化成 element 的一个属性。
//或者
$('elType + x').attr('value',true/false)