我有一个脚本从db加载一组numbners并选择那些对应的复选框。数组中的数字介于1到43之间,我有43个复选框,从id =“1”到id =“43”。 该脚本是从select中触发的。
function getroleitems(ruolo){
fun = new Array();
$.ajax({
type: "POST",
data: {id: ruolo},
url: "getroleitems.php",
success: function(data){
fun = data;
if (fun.length){
$('#' + fun.join(', #')).attr('checked', true);
}
},dataType:"json"
});
};
$(document).ready(function(){
$('#ruolo').change(function(){
$('input:checkbox').attr('checked',false);
var ruolo=$('#ruolo').val();
getroleitems(ruolo);
});
});
问题在于,如果我添加这一行:
$('input:checkbox').attr('checked',false);
脚本不再标记复选框。我试图在更改功能和ajax内部添加此行同样的运气。 我需要在加载新数组之前重置每个复选框的状态以取消设置。 有人可以帮帮我吗?
答案 0 :(得分:0)
试试这个:
$('input:checkbox').removeAttr('checked');
或:
$('input:checkbox').prop('checked',false);
答案 1 :(得分:0)
对于具有基础布尔属性(已检查为1)的属性,removeAttr
会自动将基础属性设置为false。 (请注意,这是jQuery 1.6.1中添加的向后兼容性“修复”)。您可以使用:
$('input:checkbox').removeAttr('checked');
答案 2 :(得分:0)
解决。 关键是使用.attr()可以在DOM树中设置属性的值。根据浏览器,浏览器版本和jQuery版本(特别是1.7),这并不总是具有预期的效果。
使用.prop(),您可以操作属性(在本例中为“已检查状态”)。
所以我改变了
$('#' + fun.join(', #')).attr('checked', true);
使用.prop而不是.attr
$('#' + fun.join(', #')).prop('checked', true);
代码开始正确显示所有内容。 请注意,没有这一行
$('input:checkbox').attr('checked',false);
.attr()和.prop()给出相同的结果。