2013-11-19 4 views
3

Почему эта функция на Chrome не работает второй раз?jQuery проверить все флажки работает только один раз

$('.main').on('change','input[name="select_all"]',function(){ 
    if($(this).is(':checked')){ 
     $('input[type="checkbox"]',$(this).parent().parent().parent()).attr('checked',true); 
    }else{ 
     $('input[type="checkbox"]',$(this).parent().parent().parent()).removeAttr('checked'); 
}); 

На первых нажмите он проверяет все, на секунде он неустановленное все ... а на третьем ничего не делает ...

jsfiddle

PS. Он добавляет и удаляет проверенные атрибуты, но визуально он не изменяется.

Chrome 31.0.1650.57 м

ответ

8

Использования prop вместо attr:

$('.main').on('change','input[name="select_all"]',function(){ 
    if($(this).is(':checked')){ 
     $('input[type="checkbox"]',$(this).parent().parent().parent()).prop('checked',true); 
    }else{ 
     $('input[type="checkbox"]',$(this).parent().parent().parent()).prop('checked', false); 
    } 
}); 

jQuery documentation объясняют разницу и перечисляете некоторые случаев, когда вы должны использовать prop.

+0

Работы, спасибо. –

-1
$('.main').on('change','input[name="select_all"]',function(){ 
    if($(this).is(':checked')){ 
     $('input[type="checkbox"]',$(this).parent().parent().parent()).attr('checked',true); 
    }else{ 
    $('input[type="checkbox"]',$(this).parent().parent().parent()).attr('checked',false); 
}); 

Я надеюсь, что это то, что вы ищете

+0

Вы хотя бы проверили это? Это все еще не работает. –

+0

Остерегайтесь нисходящих! Может быть, это не сработает, скажите ему, каким образом это терпит неудачу. – Chandranshu

Смежные вопросы