JQuery флажки снять проблему

0

У меня есть сценарий, который загружает из 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 с той же удачей. Мне нужно сбросить статус каждого флажка, чтобы отключиться, прежде чем загружать новый массив. Кто-нибудь может мне помочь?

  • 0
    Попробуйте это: $('input:checkbox').each(function(){this.checked = false; });
  • 0
    Спасибо, но я продолжаю получать тот же результат. Код не выдает ошибки, входит в цикл if (fun.length), но не ставит флажок
Теги:
checkbox

3 ответа

0
Лучший ответ

Решаемые. Дело в том, что с.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() дают тот же результат.

0

Для атрибутов, которые имеют базовые логические свойства (из которых отмечен один), removeAttr автоматически removeAttr базовому свойству значение false. (Обратите внимание, что это относится к исправлениям обратной совместимости, добавленным в jQuery 1.6.1). Вы можете использовать:

$('input:checkbox').removeAttr('checked');
0

Попробуй это:

$('input:checkbox').removeAttr('checked');

или:

$('input:checkbox').prop('checked',false);
  • 0
    Это же удача, уже попробовал. Код не работает даже при первом выполнении (когда я загружаю страницу в первый раз).
  • 0
    Это должно работать, вот рабочая демонстрация: jsfiddle.net/Z7suE
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню