jQuery 3
A partir de jQuery 3, removeAttr
fait pas définir la propriété correspondante à false
plus :
Avant jQuery 3.0, l'utilisation de .removeAttr()
sur un attribut booléen tel que checked
, selected
ou readonly
mettrait également la propriété nommée correspondante à false
. Ce comportement était nécessaire pour les anciennes versions d'Internet Explorer mais n'est pas correct pour les navigateurs modernes car l'attribut représente la valeur initiale et la propriété représente la valeur actuelle (dynamique).
C'est presque toujours une erreur d'utiliser .removeAttr( "checked" )
sur un élément DOM. La seule fois où cela peut être utile est si le DOM est ensuite sérialisé en une chaîne HTML. Dans tous les autres cas, .prop( "checked", false )
doit être utilisé à la place.
Changelog
Donc seulement .prop('checked',false)
est la manière correcte d'utiliser cette version.
Réponse originale (de 2011) :
Pour les attributs qui ont des propriétés booléennes sous-jacentes (dont le checked
en est un), removeAttr
définit automatiquement la propriété sous-jacente à false
. (Notez que cela fait partie des "corrections" de compatibilité ascendante ajoutées dans jQuery 1.6.1).
Donc, l'un ou l'autre fonctionnera... mais le deuxième exemple que vous avez donné (utilisant prop
) est le plus correct des deux. Si votre objectif est de décocher la case à cocher, vous voulez vraiment affecter l'attribut propriété et non l'attribut, et il n'y a pas besoin de passer par removeAttr
pour le faire.
4 votes
Avez-vous lu le post de John Resig ? ejohn.org/blog/jquery-16-et-attr