A partir do jQuery 3, removeAttrse não definir a propriedade correspondente a falsemais:
Antes do jQuery 3.0, usando .removeAttr()em um atributo booleano tais como checked, selectedou readonlyse também definir o correspondente propriedade nomeada para false. 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 checkeduma), removeAttrdefine 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 removeAttrisso.
@tandu: Você pode , mas não deveria. Dos documentos: " Observação: não use [ 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." removePropdestina-se realmente ao uso apenas com propriedades personalizadas.
John Flatness,
17
use checked: propriedade verdadeira, falsa da caixa de seleção.
Sim, para o Chrome, use: $("input[type='checkbox'], input[type='radio']").prop("checked", false).attr("checked", false).removeAttr("checked");
Rod de
Eu uso o componente personalizado (CSS + JS) para substituir o rádio de entrada e a caixa de seleção. Esta é a única maneira que funciona para mim. Obrigado!
Silvio Delgado
3
Outra alternativa para fazer a mesma coisa é filtrar no atributo type = checkbox :
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.
Respostas:
jQuery 3
A partir do jQuery 3,
removeAttr
se não definir a propriedade correspondente afalse
mais:Changelog
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 comofalse
. (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 porremoveAttr
isso.fonte
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:
fonte
Eu recomendo usar ambos, prop e attr porque tive problemas com o Chrome e resolvi usando as duas funções.
fonte
$("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 :
ou
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 ...
fonte