Avec l’introduction de la méthode prop, je dois maintenant connaître la méthode acceptée pour décocher une case. Est-ce:
$('input').filter(':checkbox').removeAttr('checked');
ou
$('input').filter(':checkbox').prop('checked',false);
jQuery 3
A partir de jQuery 3, removeAttr
ne définit plus la propriété correspondante sur false
:
Avant jQuery 3.0, utiliser
.removeAttr()
sur un atsortingbut booléen tel quechecked
,selected
oureadonly
définirait également la propriété nommée correspondante surfalse
. Ce comportement était requirejs pour les anciennes versions d’Internet Explorer mais n’est pas correct pour les navigateurs modernes car l’atsortingbut représente la valeur initiale et la propriété représente la valeur actuelle (dynamic).C’est presque toujours une erreur d’utiliser
.removeAttr( "checked" )
sur un élément DOM. La seule fois où cela peut être utile est que le DOM soit ensuite sérialisé à une chaîne HTML. Dans tous les autres cas,.prop( "checked", false )
doit être utilisé à la place.
Changelog
Par conséquent, seul .prop('checked',false)
est correct lorsque vous utilisez cette version.
Réponse originale (à partir de 2011):
Pour les atsortingbuts qui ont des propriétés booléennes sous-jacentes (dont une est checked
), removeAttr
définit automatiquement la propriété sous-jacente sur false
. (Notez que cela fait partie des “correctifs” de compatibilité ascendante ajoutés dans jQuery 1.6.1).
Donc, soit ça va marcher … mais le deuxième exemple que vous avez donné (en utilisant prop
) est le plus correct des deux. Si votre objective est de décocher la case, vous voulez vraiment affecter la propriété , pas l’atsortingbut, et il n’y a pas besoin de passer par removeAttr
pour le faire.
use checked
: true, false propriété de la case à cocher.
jQuery:
if($('input[type=checkbox]').is(':checked')) { $(this).prop('checked',true); } else { $(this).prop('checked',false); }
Je recommande d’utiliser les deux, prop et attr car j’avais des problèmes avec Chrome et je l’ai résolu en utilisant les deux fonctions.
if ($(':checkbox').is(':checked')){ $(':checkbox').prop('checked', true).attr('checked', 'checked'); } else { $(':checkbox').prop('checked', false).removeAttr('checked'); }
Une autre alternative pour faire la même chose est de filtrer sur l’atsortingbut type = checkbox :
$('input[type="checkbox"]').removeAttr('checked');
ou
$('input[type="checkbox"]').prop('checked' , false);
Rappelez-vous que la différence entre les atsortingbuts et les propriétés peut être importante dans des situations spécifiques. Avant jQuery 1.6 , la méthode .attr () prenait parfois en compte les valeurs de propriété lors de la récupération de certains atsortingbuts, ce qui pouvait entraîner un comportement incohérent. À partir de jQuery 1.6, la méthode .prop () permet de récupérer explicitement les valeurs de propriété, tandis que .attr () récupère les atsortingbuts.
En savoir plus …