У меня есть сценарий, который загружает из db массив numbners и выбирает те флажки, которые соответствуют. Числа в массиве находятся между 1 и 43 и у меня есть 43 флажка от id = "1" до id = "43". Сценарий запускается из выбранного.
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 с той же удачей. Мне нужно сбросить статус каждого флажка, чтобы отключиться, прежде чем загружать новый массив. Кто-нибудь может мне помочь?
Решаемые. Дело в том, что с.attr() вы устанавливаете значение атрибута в дереве DOM. В зависимости от браузера, версии браузера и версии jQuery (особенно 1.7) это не всегда имеет желаемый эффект.
С помощью.prop() вы управляете свойством (в данном случае "checked state").
Так как я изменил
$('#' + fun.join(', #')).attr('checked', true);
использовать.prop вместо.attr
$('#' + fun.join(', #')).prop('checked', true);
код начал показывать все правильно. Обратите внимание, что без этой строки
$('input:checkbox').attr('checked',false);
.attr() и.prop() дают тот же результат.
Для атрибутов, которые имеют базовые логические свойства (из которых отмечен один), removeAttr
автоматически removeAttr
базовому свойству значение false. (Обратите внимание, что это относится к исправлениям обратной совместимости, добавленным в jQuery 1.6.1). Вы можете использовать:
$('input:checkbox').removeAttr('checked');
Попробуй это:
$('input:checkbox').removeAttr('checked');
или:
$('input:checkbox').prop('checked',false);
$('input:checkbox').each(function(){this.checked = false; });