.prop (‘verificado’, falso) ou .removeAttr (‘verificado’)?

Com a introdução do método prop, agora preciso conhecer a maneira aceita de desmarcar uma checkbox de seleção. É isso:

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

ou

 $('input').filter(':checkbox').prop('checked',false); 

jQuery 3

A partir do jQuery 3, removeAttr não configura mais a propriedade correspondente para false :

Antes do jQuery 3.0, o uso de .removeAttr() em um atributo booleano como checked , selected ou readonly também .removeAttr() a propriedade nomeada correspondente como false . Esse comportamento era necessário para versões antigas do Internet Explorer, mas não está correto para navegadores modernos porque o atributo representa o valor inicial e a propriedade representa o valor atual (dynamic).

É quase sempre um erro usar .removeAttr( "checked" ) em um elemento DOM. O único momento em que isso pode ser útil é se o DOM for mais tarde serializado de volta para uma string HTML. Em todos os outros casos, .prop( "checked", false ) deve ser usado no lugar.

Changelog

Portanto, somente .prop('checked',false) é o caminho correto ao usar esta versão.


Resposta original (de 2011):

Para atributos que possuem propriedades booleanas subjacentes (das quais a removeAttr é uma), removeAttr define automaticamente a propriedade subjacente como false . (Observe que essa é uma das “correções” de compatibilidade com versões anteriores incluídas no jQuery 1.6.1).

Então, ou vai funcionar … mas o segundo exemplo que você deu (usando prop ) é o mais correto dos dois. Se seu objective é desmarcar a checkbox de seleção, você realmente quer afetar a propriedade , não o atributo, e não há necessidade de passar por removeAttr para fazer isso.

use checked : true, false propriedade da checkbox de seleção.

jQuery:

 if($('input[type=checkbox]').is(':checked')) { $(this).prop('checked',true); } else { $(this).prop('checked',false); } 

Eu recomendo usar both, prop e attr porque tive problemas com o Chrome e resolvi usando ambas as funções.

 if ($(':checkbox').is(':checked')){ $(':checkbox').prop('checked', true).attr('checked', 'checked'); } else { $(':checkbox').prop('checked', false).removeAttr('checked'); } 

Outra alternativa para fazer o mesmo é filtrar no atributo type = checkbox :

 $('input[type="checkbox"]').removeAttr('checked'); 

ou

 $('input[type="checkbox"]').prop('checked' , false); 

Lembre-se de que a diferença entre atributos e propriedades pode ser importante em situações específicas. Antes do jQuery 1.6 , o método .attr () às vezes levava em consideração os valores de propriedade ao recuperar alguns atributos, o que poderia causar um comportamento inconsistente. A partir do jQuery 1.6, o método .prop () fornece uma maneira de recuperar explicitamente valores de propriedades, enquanto .attr () recupera atributos.

Saiba mais …