.prop('checked',false) ou.removeAttr ('vérifié')?

Avec l'introduction de la méthode prop, maintenant j'ai besoin de connaître la façon acceptée de décocher une case à cocher. Est-ce:

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

Ou

$('input').filter(':checkbox').prop('checked',false);
91
demandé sur Phillip Senn 2011-05-29 23:11:50

4 réponses

JQuery 3

À partir de jQuery 3, removeAttr ne définit plus la propriété correspondante sur false:

Avant jquery 3.0, en utilisant .removeAttr() sur un attribut booléen tel que checked, selected, ou {[5] } définirait également la propriété nommée correspondante à false. Ce comportement était requis 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 le valeur actuelle (dynamique).

C'est presque toujours une erreur d'utiliser .removeAttr( "checked" ) sur un élément DOM. La seule fois où cela pourrait être utile est si le DOM va plus tard être sérialisé dans une chaîne HTML. Dans tous les autres cas, .prop( "checked", false ) doit être utilisé à la place.

Changelog

Donc .prop('checked',false) est correcte lors de l'utilisation de cette version.


Réponse originale (de 2011):

Pour les attributs qui ont des propriétés booléennes sous-jacentes (dont checked est un) removeAttr définit automatiquement la propriété sous-jacente à false. (Notez que c'est parmi les "correctifs" de rétrocompatibilité ajoutés dans jQuery 1.6.1).

Donc, l'un ou l'autre fonctionnera... mais le deuxième exemple que vous avez donné (en utilisant prop) est le plus correct des deux. Si votre objectif est de décocher la case à cocher, vous voulez vraiment affecter la propriété , Pas l'attribut, et il n'est pas nécessaire de passer par removeAttr pour le faire.

97
répondu John Flatness 2017-01-06 13:00:18

Utilisez 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);
}
6
répondu suraj rawat 2017-12-28 23:52:41

Je recommande d'utiliser les deux, prop et attr parce que j'ai eu 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');
}
3
répondu Ragnar 2016-04-08 20:45:04

. une Autre alternative pour faire la même chose, c'est de filtrer sur type=checkbox attribut:

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

Ou

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

Rappelez-vous que la différence entre les attributs et les propriétés peut être importante dans des situations spécifiques. Avant jQuery 1.6 , la .la méthode attr() prenait parfois en compte les valeurs de propriété lors de la récupération de certains attributs, ce qui pouvait entraîner un comportement incohérent. A partir de jQuery 1.6, la .la méthode prop() fournit un moyen de récupérer explicitement la propriété valeurs, tandis que .attr() récupère les attributs.

En Savoir plus...

2
répondu tonnoz 2014-07-24 08:42:16