Une question plus spécifique (et très utile!), "Comment puis-je vérifier un élément dans un ensemble de cases à cocher PAR VALEUR?", Je pense que nous pouvons également discuter ici, et j'ai posté une réponse ci-dessous.
Notez que c'est l'approche utilisée par les tests unitaires de jQuery avant la version 1.6 et qu'il est préférable d'utiliser $('.myCheckbox').removeAttr('checked');car cette dernière va, si la case a été initialement cochée, changer le comportement d'un appel à .reset()sur n'importe quel formulaire qui la contient - un subtil mais probablement changement de comportement indésirable.
Pour plus de contexte, une discussion incomplète des modifications apportées à la gestion de l' checkedattribut / propriété dans la transition de 1.5.x à 1.6 peut être trouvée dans les notes de publication de la version 1.6 et la section Attributs contre propriétés de la .prop()documentation .
@Xian la suppression de l'attribut vérifié rend impossible la réinitialisation du formulaire
mcgrailm
6
En guise de remarque, jQuery 1.6.1 devrait résoudre le problème que j'ai mentionné, afin que nous puissions tous continuer à utiliser $ (...). Prop (...)
cwharris
19
"Si vous travaillez avec un seul élément, il sera toujours plus rapide à utiliser DOMElement.checked = true". Mais ce serait négligeable, car ce n'est qu'un élément ...
Tyler Crompton
47
Comme le dit Tyler, il s'agit d'une amélioration négligeable des performances. Pour moi, le codage à l'aide d'une API commune le rend plus lisible que le mélange d'API natives et d'API jQuery. Je resterais avec jQuery.
Charlie Kilian
18
@TylerCrompton - Bien sûr, ce n'est pas entièrement une question de performances, mais faire $(element).prop('checked')est un gaspillage complet de frappe. element.checkedexiste et doit être utilisé dans les cas où vous en avez déjàelement
également $ (sélecteur). coché pour vérifier est vérifié
eomeroff
6
J'ai essayé ce code exact et cela n'a pas fonctionné pour moi dans le cas d'une case à cocher sélectionner tout / sélectionner aucun qui doit tout cocher et décocher ainsi que vérifier leur état. Au lieu de cela, j'ai essayé la réponse de @Christopher Harris et cela a fait l'affaire.
JD Smith
Pourquoi utiliser "form #mycheckbox" au lieu de simplement "#mycheckbox"? L'identifiant est déjà unique dans tout le document, il est plus rapide et plus simple de le choisir directement.
YuriAlbuquerque
@YuriAlbuquerque c'était un exemple. vous pouvez utiliser le sélecteur de votre choix.
bchhun
5
$ (sélecteur) .checked ne fonctionne pas. Il n'y a pas de méthode «vérifiée» dans jQuery.
Brendan Byrd
318
C'est la bonne façon de cocher et de décocher les cases à cocher avec jQuery, car c'est une norme multiplateforme, et cela permettra des reposts de formulaire.
En faisant cela, vous utilisez les normes JavaScript pour cocher et décocher les cases à cocher, donc tout navigateur qui implémente correctement la propriété "vérifié" de l'élément checkbox exécutera ce code sans problème. Cela devrait être tous les principaux navigateurs, mais je ne peux pas tester avant Internet Explorer 9.
Le problème (jQuery 1.6):
Une fois qu'un utilisateur clique sur une case à cocher, cette case à cocher cesse de répondre aux modifications d'attribut "vérifié".
Voici un exemple de l'attribut de case à cocher qui ne fait pas le travail après que quelqu'un a cliqué sur la case à cocher (cela se produit dans Chrome).
En utilisant la propriété "vérifiée" de JavaScript sur les éléments DOM , nous sommes en mesure de résoudre le problème directement, au lieu d'essayer de manipuler le DOM pour qu'il fasse ce que nous voulons qu'il fasse.
Ce plugin va modifier la propriété vérifiée de tous les éléments sélectionnés par jQuery, et cocher et décocher avec succès les cases à cocher en toutes circonstances. Ainsi, bien que cela puisse sembler une solution excessive, cela améliorera l'expérience utilisateur de votre site et aidera à éviter la frustration des utilisateurs.
(function( $ ){
$.fn.checked =function(value){if(value ===true|| value ===false){// Set the value of the checkbox
$(this).each(function(){this.checked = value;});}elseif(value ===undefined|| value ==='toggle'){// Toggle the checkbox
$(this).each(function(){this.checked =!this.checked;});}returnthis;};})( jQuery );
Alternativement, si vous ne souhaitez pas utiliser de plug-in, vous pouvez utiliser les extraits de code suivants:
Dans votre premier exemple JSFiddle, vous devriez utiliser removeAttr('checked')plutôt queattr('checked', false)
Daniel X Moore
4
@DanielXMoore, vous contournez le problème. L'exemple consistait à montrer qu'une fois que l'utilisateur avait cliqué sur la case à cocher, le navigateur ne répond plus aux checkedmodifications d'attribut, quelle que soit la méthode utilisée pour les modifier.
cwharris
3
@ChristopherHarris Ok, tu as raison, ça m'a manqué. À partir de jQuery 1.6, ne devriez-vous pas utiliser la méthode .prop? $('.myCheckBox').prop('checked', true)De cette façon, il s'appliquera automatiquement à l'ensemble complet des éléments appariés (uniquement lors de la définition, l'obtention n'est toujours que le premier)
Daniel X Moore
Oui. propest certainement la manière appropriée de définir des attributs sur un élément.
cwharris
@ChristopherHarris, j'ai ajouté ce dont j'avais besoin au plugin pour permettre une certaine flexibilité des paramètres. Cela a facilité le traitement en ligne sans conversion de type. Esp de bases de données disparates avec des "idées" sur ce qu'est "vrai". Violon: jsfiddle.net/Cyberjetx/vcp96
vous pouvez aussi aller $ ("# myTable input: checkbox"). each (...);
Chris Brandsma
Vous pouvez également aller$(".myCheckbox").click()
RobertPitt
3
@Michah en supprimant l'attribut vérifié, il est impossible de réinitialiser le formulaire
mcgrailm
12
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger
$("#mycheckbox").click();travaillé pour moi pendant que j'écoutais à l' événement de changement et aussi .attret .propn'a pas l' événement de changement incendie.
Damodar Bashyal
80
Vous pouvez également étendre l'objet $ .fn avec de nouvelles méthodes:
Ou vous voudrez peut-être leur donner des noms plus uniques comme mycheck () et myuncheck () dans le cas où vous utilisez une autre bibliothèque qui utilise ces noms.
Le dernier déclenchera l'événement de clic pour la case à cocher, les autres ne le feront pas. Donc, si vous avez du code personnalisé dans l'événement onclick pour la case à cocher que vous souhaitez déclencher, utilisez la dernière.
C'est inexact. définir l'attribut «vérifié» sur «» ne désélectionnera pas les cases à cocher dans au moins chrome.
cwharris
@xixonia J'ai testé avant de poster votre violon ne fonctionne pas car vous n'avez pas modifié le menu de gauche pour inclure jquery
mcgrailm
1
mcgralim - en 1.6 c'est encore plus facile .... $(".mycheckbox").prop("checked", true/false)
gnarf
2
@MarkAmery, vous avez mentionné que mon message n'a rien ajouté au moment de la publication, mais c'est exact. Si vous regardez l'historique de la réponse acceptée, vous constaterez qu'ils suggèrent de supprimer l'élément. Ce qui rend impossible la réinitialisation du formulaire, c'est pourquoi j'ai commencé par poster.
mcgrailm
1
@mcgrailm Je suis allé de l'avant et j'ai modifié la réponse acceptée à la lumière de vos remarques. Si vous souhaitez jeter un œil dessus et vérifier qu'il a l'air bien dans son état actuel, je l'apprécierais. Je m'excuse encore une fois d'avoir formulé de vives critiques qui étaient, au moins en partie, très peu judicieuses.
Mark Amery
51
Cela sélectionne les éléments qui ont l'attribut spécifié avec une valeur contenant la sous-chaîne donnée "ckbItem":
$('input[name *= ckbItem]').prop('checked',true);
Il sélectionnera tous les éléments qui contiennent ckbItem dans son attribut de nom.
Comment puis-je vérifier un ensemble de cases à cocher PAR VALEUR?
N'oubliez pas que dans un ensemble de cases à cocher typique, toutes les balises d'entrée ont le même nom, elles diffèrent par l'attributvalue : il n'y a pas d'ID pour chaque entrée de l'ensemble.
La réponse de Xian peut être étendue avec un sélecteur plus spécifique , en utilisant la ligne de code suivante:
Cela ne répond pas à la question (la question consiste à définir si une case à cocher est cochée, pas à déterminer si une case à cocher est cochée). C'est aussi un moyen assez laid de déterminer si la case est cochée (d'une part, vous exploitez le fait non évident qui .val()reviendra toujours undefinedlorsqu'il est appelé sur 0 éléments pour détecter qu'un objet jQuery est vide, quand vous le pourriez il suffit de le vérifier à la .lengthplace) - voir stackoverflow.com/questions/901712/… pour des approches plus lisibles.
Mark Amery
42
Pour cocher une case à l'aide de jQuery 1.6 ou supérieur, procédez comme suit:
checkbox.prop('checked',true);
Pour décocher, utilisez:
checkbox.prop('checked',false);
Voici ce que j'aime utiliser pour basculer une case à cocher à l'aide de jQuery:
Cette réponse est obsolète car elle utilise .attrau lieu de .prop.
Blazemonger
25
Si vous utilisez PhoneGap pour le développement d'applications et que vous avez une valeur sur le bouton que vous souhaitez afficher instantanément, n'oubliez pas de le faire
$("#check").on("click",function(){var chk = document.getElementById('check').checked;var arr = document.getElementsByTagName("input");if(chk){for(var i in arr){if(arr[i].name =='check') arr[i].checked =true;}}else{for(var i in arr){if(arr[i].name =='check') arr[i].checked =false;}}});
- 1; mélanger les sélecteurs jQuery comme $("#check")avec les appels bruts de l'API DOM comme document.getElementsByTagName("input")me semble inélégant, d'autant plus que les forboucles ici pourraient être évitées en utilisant .prop(). Quoi qu'il en soit, c'est encore une autre réponse tardive qui n'ajoute rien de nouveau.
Mark Amery
20
Une autre solution possible:
var c = $("#checkboxid");if(c.is(":checked")){
$('#checkboxid').prop('checked',false);}else{
$('#checkboxid').prop('checked',true);}
Dans Internet Explorer antérieur à la version 9, l'utilisation de .prop () pour définir une propriété d'élément DOM sur autre chose qu'une simple valeur primitive (nombre, chaîne ou booléen) peut provoquer des fuites de mémoire si la propriété n'est pas supprimée (à l'aide de .removeProp ( )) avant que l'élément DOM ne soit supprimé du document. Pour définir en toute sécurité des valeurs sur des objets DOM sans fuite de mémoire, utilisez .data ().
Ce n'est pas pertinent, car toutes les réponses (correctes) utilisent .prop('checked',true).
Blazemonger
Je ne suis pas sûr d'avoir compris votre commentaire, il existe toujours dans la documentation jQuery. Voulez-vous dire qu'il n'y a pas de fuite de mémoire dans IE <9?
naor
2
Il n'y a pas de fuite de mémoire dans ce cas, puisque nous sommes le mettre à une valeur simple primitive (Boolean).
- 1 pour être une réponse uniquement codée, ne répondant pas directement à la question et n'ajoutant rien que les autres réponses n'avaient pas déjà couvert.
Mark Amery
15
C'est probablement la solution la plus courte et la plus simple:
cela ne devrait-il pas être trueet falseet non 'true'et 'false'?
tpower
9
Cela "n'a pas fonctionné" car a 'false'été converti en valeur booléenne, ce qui a entraîné une truechaîne vide qui a falsedonc "fonctionné". Voir ce violon par exemple de ce que je veux dire.
Shadow Wizard est Ear For You
@ chris97ong J'ai annulé votre modification; quand quelqu'un dit "N'utilisez pas le code ci-dessous parce qu'il ne fonctionne pas", corriger ce code tout en laissant le commentaire disant qu'il ne fonctionne pas est dangereux - surtout quand il casse l'explication dans les commentaires de la raison pour laquelle le code n'est pas ne fonctionne pas. Cela dit, cette réponse est encore quelque peu confuse et mérite un downvote pour les raisons données par tpower et ShadowWizard.
Mark Amery
1
utilisez des valeurs vraies et fausses pour les booléens, n'utilisez pas «vrai» ou «faux» (chaînes).
Jone Polvora
13
Lorsque vous avez coché une case comme;
$('.className').attr('checked','checked')
cela pourrait ne pas suffire. Vous devez également appeler la fonction ci-dessous;
$('.className').prop('checked','true')
Surtout lorsque vous avez supprimé l'attribut checkbox.
// when the button (select_unit_button) is clicked it returns all the checed checkboxes values
$("#select_unit_button").on("click",function(e){var arr =[];
$(':checkbox:checked').each(function(i){
arr[i]= $(this).val();// u can get id or anything else});//console.log(arr); // u can test it using this in google chrome});
$("#mycheckbox").click();
Réponses:
JQuery moderne
Utilisation
.prop()
:API DOM
Si vous travaillez avec un seul élément, vous pouvez toujours simplement accéder au sous-jacent
HTMLInputElement
et modifier sa.checked
propriété:L'avantage d'utiliser les
.prop()
et.attr()
méthodes au lieu de cela est qu'elles fonctionneront sur tous les éléments correspondants.jQuery 1.5.x et inférieur
La
.prop()
méthode n'est pas disponible, vous devez donc l'utiliser.attr()
.Notez que c'est l'approche utilisée par les tests unitaires de jQuery avant la version 1.6 et qu'il est préférable d'utiliser
$('.myCheckbox').removeAttr('checked');
car cette dernière va, si la case a été initialement cochée, changer le comportement d'un appel à.reset()
sur n'importe quel formulaire qui la contient - un subtil mais probablement changement de comportement indésirable.Pour plus de contexte, une discussion incomplète des modifications apportées à la gestion de l'
checked
attribut / propriété dans la transition de 1.5.x à 1.6 peut être trouvée dans les notes de publication de la version 1.6 et la section Attributs contre propriétés de la.prop()
documentation .la source
DOMElement.checked = true
". Mais ce serait négligeable, car ce n'est qu'un élément ...$(element).prop('checked')
est un gaspillage complet de frappe.element.checked
existe et doit être utilisé dans les cas où vous en avez déjàelement
Utilisation:
Et si vous voulez vérifier si une case est cochée ou non:
la source
C'est la bonne façon de cocher et de décocher les cases à cocher avec jQuery, car c'est une norme multiplateforme, et cela permettra des reposts de formulaire.
En faisant cela, vous utilisez les normes JavaScript pour cocher et décocher les cases à cocher, donc tout navigateur qui implémente correctement la propriété "vérifié" de l'élément checkbox exécutera ce code sans problème. Cela devrait être tous les principaux navigateurs, mais je ne peux pas tester avant Internet Explorer 9.
Le problème (jQuery 1.6):
Une fois qu'un utilisateur clique sur une case à cocher, cette case à cocher cesse de répondre aux modifications d'attribut "vérifié".
Voici un exemple de l'attribut de case à cocher qui ne fait pas le travail après que quelqu'un a cliqué sur la case à cocher (cela se produit dans Chrome).
Violon
La solution:
En utilisant la propriété "vérifiée" de JavaScript sur les éléments DOM , nous sommes en mesure de résoudre le problème directement, au lieu d'essayer de manipuler le DOM pour qu'il fasse ce que nous voulons qu'il fasse.
Violon
Ce plugin va modifier la propriété vérifiée de tous les éléments sélectionnés par jQuery, et cocher et décocher avec succès les cases à cocher en toutes circonstances. Ainsi, bien que cela puisse sembler une solution excessive, cela améliorera l'expérience utilisateur de votre site et aidera à éviter la frustration des utilisateurs.
Alternativement, si vous ne souhaitez pas utiliser de plug-in, vous pouvez utiliser les extraits de code suivants:
la source
removeAttr('checked')
plutôt queattr('checked', false)
checked
modifications d'attribut, quelle que soit la méthode utilisée pour les modifier.$('.myCheckBox').prop('checked', true)
De cette façon, il s'appliquera automatiquement à l'ensemble complet des éléments appariés (uniquement lors de la définition, l'obtention n'est toujours que le premier)prop
est certainement la manière appropriée de définir des attributs sur un élément.Tu peux faire
ou
Si vous avez du code personnalisé dans l'événement onclick pour la case à cocher que vous souhaitez déclencher, utilisez celui-ci à la place:
Vous pouvez décocher en supprimant entièrement l'attribut:
Vous pouvez cocher toutes les cases comme ceci:
la source
$(".myCheckbox").click()
.attr
au lieu de.prop
.$("#mycheckbox").click();
travaillé pour moi pendant que j'écoutais à l' événement de changement et aussi.attr
et.prop
n'a pas l' événement de changement incendie.Vous pouvez également étendre l'objet $ .fn avec de nouvelles méthodes:
Ensuite, vous pouvez simplement faire:
Ou vous voudrez peut-être leur donner des noms plus uniques comme mycheck () et myuncheck () dans le cas où vous utilisez une autre bibliothèque qui utilise ces noms.
la source
.attr
au lieu de.prop
.Le dernier déclenchera l'événement de clic pour la case à cocher, les autres ne le feront pas. Donc, si vous avez du code personnalisé dans l'événement onclick pour la case à cocher que vous souhaitez déclencher, utilisez la dernière.
la source
.attr
au lieu de.prop
.click
événement n'est pas fiable dans Firefox et Edge.Pour cocher une case, vous devez utiliser
ou
et pour décocher une case, vous devez toujours la définir sur false:
Si tu fais
il supprime l'attribut tous ensemble et vous ne pourrez donc pas réinitialiser le formulaire.
BAD DEMO jQuery 1.6 . Je pense que c'est cassé. Pour 1.6, je vais faire un nouveau post à ce sujet.
NOUVELLE DÉMO DE TRAVAIL jQuery 1.5.2 fonctionne dans Chrome.
Les deux démos utilisent
la source
$(".mycheckbox").prop("checked", true/false)
Cela sélectionne les éléments qui ont l'attribut spécifié avec une valeur contenant la sous-chaîne donnée "ckbItem":
Il sélectionnera tous les éléments qui contiennent ckbItem dans son attribut de nom.
la source
En supposant que la question est ...
Comment puis-je vérifier un ensemble de cases à cocher PAR VALEUR?
N'oubliez pas que dans un ensemble de cases à cocher typique, toutes les balises d'entrée ont le même nom, elles diffèrent par l'attribut
value
: il n'y a pas d'ID pour chaque entrée de l'ensemble.La réponse de Xian peut être étendue avec un sélecteur plus spécifique , en utilisant la ligne de code suivante:
la source
Je manque la solution. J'utiliserai toujours:
la source
.val()
reviendra toujoursundefined
lorsqu'il est appelé sur 0 éléments pour détecter qu'un objet jQuery est vide, quand vous le pourriez il suffit de le vérifier à la.length
place) - voir stackoverflow.com/questions/901712/… pour des approches plus lisibles.Pour cocher une case à l'aide de jQuery 1.6 ou supérieur, procédez comme suit:
Pour décocher, utilisez:
Voici ce que j'aime utiliser pour basculer une case à cocher à l'aide de jQuery:
Si vous utilisez jQuery 1.5 ou inférieur:
Pour décocher, utilisez:
la source
Voici un moyen de le faire sans jQuery
la source
Voici le code pour coché et décoché avec un bouton:
Mise à jour: Voici le même bloc de code utilisant la nouvelle méthode prop Jquery 1.6+, qui remplace attr:
la source
.attr
au lieu de.prop
.Essaye ça:
la source
Nous pouvons utiliser
elementObject
avec jQuery pour obtenir l'attribut vérifié:Nous pouvons l'utiliser pour toutes les versions de jQuery sans aucune erreur.
Mise à jour: Jquery 1.6+ a la nouvelle méthode prop qui remplace attr, par exemple:
la source
.attr
au lieu de.prop
.Si vous utilisez PhoneGap pour le développement d'applications et que vous avez une valeur sur le bouton que vous souhaitez afficher instantanément, n'oubliez pas de le faire
J'ai trouvé que sans la durée, l'interface ne sera pas mise à jour, quoi que vous fassiez.
la source
Voici le code et la démo pour savoir comment cocher plusieurs cases à cocher ...
http://jsfiddle.net/tamilmani/z8TTt/
la source
$("#check")
avec les appels bruts de l'API DOM commedocument.getElementsByTagName("input")
me semble inélégant, d'autant plus que lesfor
boucles ici pourraient être évitées en utilisant.prop()
. Quoi qu'il en soit, c'est encore une autre réponse tardive qui n'ajoute rien de nouveau.Une autre solution possible:
la source
Comme l'a dit @ livefree75:
jQuery 1.5.x et inférieur
Vous pouvez également étendre l'objet $ .fn avec de nouvelles méthodes:
Mais dans les nouvelles versions de jQuery, nous devons utiliser quelque chose comme ceci:
jQuery 1.6+
Ensuite, vous pouvez simplement faire:
la source
Si vous utilisez mobile et que vous souhaitez que l'interface se mette à jour et affiche la case à cocher comme décochée, utilisez ce qui suit:
la source
Soyez conscient des fuites de mémoire dans Internet Explorer avant Internet Explorer 9 , comme l' indique la documentation jQuery :
la source
.prop('checked',true)
.Pour jQuery 1.6+
Pour jQuery 1.5.x et inférieur
Vérifier,
la source
Pour cocher et décocher
la source
la source
C'est probablement la solution la plus courte et la plus simple:
ou
Encore plus court serait:
Voici également un jsFiddle .
la source
Le JavaScript simple est très simple et beaucoup moins de frais généraux:
Exemple ici
la source
Je n'ai pas pu le faire fonctionner en utilisant:
Vrai et faux cocheraient la case. Ce qui a fonctionné pour moi, c'est:
la source
true
etfalse
et non'true'
et'false'
?'false'
été converti en valeur booléenne, ce qui a entraîné unetrue
chaîne vide qui afalse
donc "fonctionné". Voir ce violon par exemple de ce que je veux dire.Lorsque vous avez coché une case comme;
cela pourrait ne pas suffire. Vous devez également appeler la fonction ci-dessous;
Surtout lorsque vous avez supprimé l'attribut checkbox.
la source
Voici la réponse complète en utilisant jQuery
Je le teste et ça marche à 100%: D
la source
Dans jQuery,
ou
En JavaScript,
la source
.attr
au lieu de.prop
.