Com a introdução do método prop, agora preciso saber a maneira aceita de desmarcar uma caixa de seleção. É isso:
$('input').filter(':checkbox').removeAttr('checked');
ou
$('input').filter(':checkbox').prop('checked',false);
Com a introdução do método prop, agora preciso saber a maneira aceita de desmarcar uma caixa de seleção. É isso:
$('input').filter(':checkbox').removeAttr('checked');
ou
$('input').filter(':checkbox').prop('checked',false);
Respostas:
jQuery 3
A partir do jQuery 3, removeAttr
se não definir a propriedade correspondente a false
mais:
Antes do jQuery 3.0, usando
.removeAttr()
em um atributo booleano tais comochecked
,selected
oureadonly
se também definir o correspondente propriedade nomeada parafalse
. Esse comportamento era necessário para versões antigas do Internet Explorer, mas não é correto para navegadores modernos porque o atributo representa o valor inicial e a propriedade representa o valor atual (dinâmico).Quase sempre é um erro usar
.removeAttr( "checked" )
em um elemento DOM. A única vez que pode ser útil é se o DOM for serializado posteriormente em uma string HTML. Em todos os outros casos,.prop( "checked", false )
deve ser usado.
Portanto, só .prop('checked',false)
é a maneira correta ao usar esta versão.
Resposta original (de 2011):
Para atributos que têm propriedades booleanas subjacentes (das quais checked
uma), removeAttr
define automaticamente a propriedade subjacente como false
. (Observe que isso está entre as "correções" de compatibilidade retroativa adicionadas no jQuery 1.6.1).
Então, qualquer um vai funcionar ... mas o segundo exemplo que você deu (usando prop
) é o mais correto dos dois. Se o seu objetivo é desmarcar a caixa de seleção, você realmente deseja afetar a propriedade , não o atributo, e não há necessidade de passar por removeAttr
isso.
removeProp()
] para remover propriedades nativas, como marcado, desabilitado ou selecionado. Isso removerá a propriedade completamente e, uma vez removido, não pode ser adicionado novamente ao elemento. Use .prop()
para definir essas propriedades como falso em vez de." removeProp
destina-se realmente ao uso apenas com propriedades personalizadas.
use checked
: propriedade verdadeira, falsa da caixa de seleção.
jQuery:
if($('input[type=checkbox]').is(':checked')) {
$(this).prop('checked',true);
} else {
$(this).prop('checked',false);
}
Eu recomendo usar ambos, prop e attr porque tive problemas com o Chrome e resolvi usando as duas funções.
if ($(':checkbox').is(':checked')){
$(':checkbox').prop('checked', true).attr('checked', 'checked');
}
else {
$(':checkbox').prop('checked', false).removeAttr('checked');
}
$("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Outra alternativa para fazer a mesma coisa é 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 das propriedades 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 os valores das propriedades, enquanto .attr () recupera os atributos.
Saiba mais ...