Триггер выбора / снятия флажка работает в первый раз, но не работает при последующих попытках

У меня есть кусок jQuery, который работает на основе HTML-тегов data-* для работы с флажками в группе для формы поиска.

Установите флажок "Все", и все остальные должны стать невыбранными (это работает каждый раз без проблем).

Теперь, если выбрано "Все" и вы щелкнете по другой опции, тогда "Все" должно стать невыбранным, это тоже работает как задумано.

Однако, если вы хотите, вы можете снять флажок "Все", который по умолчанию должен включать остальные флажки, чтобы вы могли отменить выбор желаемых результатов.

Если вы еще не изменили другие, это работает в первый раз, но если выбрана любая другая панель-флажок "Все" или если вы уже нажали кнопку "Все", если произойдет сбой, если вы выбрали, отмените выбор снова.,

Буду очень признателен за любые идеи относительно того, что это такое (я пытался использовать консоль, чтобы определить, что он не делает, но пока он не дает никаких подсказок).

Пример ниже.

html...
<input data-sel-group='group1' id='group1_all'/>
<input data-sel-group='group1' id='group1_1'/>
<input data-sel-group='group1' id='group1_2'/>
/html...

jQuery...
$('input:checkbox').on('click',function(){
var sel = $(this).data('sel-group'),
    all = $('#'+sel+'_all'),
    chk = all.is(':checked');
    if($(this).attr('id')==all.attr('id')){
        if(chk){
            $('input[data-sel-group="'+sel+'"][id!="'+sel+'_all"]').attr('checked', false);
        }else{
            $('input[id!="'+sel+'_all"][data-sel-group="'+sel+'"]').attr('checked', true);
        }
    }else{
        all.attr('checked', false);
        if($('input[data-sel-group="'+sel+'"]:checked').length<=0){
            all.attr('checked', true);
        }
    }
})

2 ответа

Решение

Использование .prop() вместо .attr()

$(selector).prop('checked', true/false);

Также пройдите .prop() против.attr()

Вы должны использовать отложенное выполнение при установке флажка. Пожалуйста, обратитесь этот блог

Другие вопросы по тегам