jQuery vérifie si une entrée est une case à cocher de type?


151

J'aimerais savoir si une entrée est une case à cocher ou non, et ce qui suit ne fonctionne pas:

$("#myinput").attr('checked') === undefined

Merci une fois de plus!

Réponses:


333

Vous pouvez utiliser le pseudo-sélecteur :checkboxavec un appel à la isfonction de jQuery :

$('#myinput').is(':checkbox')

1
C'est la méthode que j'utilise toujours.
Topher Fangio

Vous ne pouvez vraiment pas faire plus simple que cela.
KyleFarris

9
Pourquoi utiliser le moteur de sélection pour cela? C'est complètement inutile.
Tim Down

7
@Tim Down Je comprends votre point de vue qu'il pourrait y avoir des moyens plus efficaces d'accomplir la même chose. Je suppose que j'aime cette version car le code est très lisible.
Ken Browning le

2
@KenBrowning: Très bien. J'étais assez anti-jQuery en 2009, en particulier l'attitude SO répandue d'utiliser aveuglément jQuery pour tout; mes opinions se sont un peu adoucies depuis et j'annulerais mon vote négatif si c'était possible. Cependant, je pense toujours que j'avais un point. Alternative (que je ne peux pas nier est plus verbeuse):var myInput = $("myinput")[0]; var isCheckbox = myInput.nodeName.toLowerCase() == "input" && myInput.type == "checkbox";
Tim Down

22
>>> a=$("#communitymode")[0]
<input id="communitymode" type="checkbox" name="communitymode">
>>> a.type
"checkbox"

Ou, plus du style de jQuery:

$("#myinput").attr('type') == 'checkbox'

Parfaitement valable. Pas le plus simple.
KyleFarris

6
Il économise en utilisant le moteur de sélection de jQuery, dont l'utilisation ici est totalement inappropriée. La première variante est bien meilleure, car elle évite toute possibilité que la attr()fonction confuse de jQuery gâche quoi que ce soit.
Tim Down le

3
@Tim Down a raison - vous devriez changer attr()pour prop(), afaik. attr()n'obtient pas toujours la valeur d'attribut «réelle» (c'est-à-dire cochée ou non) du navigateur. Honnêtement, je ne sais pas pourquoi c'est le cas, mais j'ai appris cela il y a quelque temps.
thekingoftruth

1
Dans Chome, votre deuxième exemple est sensible à la casse: jsfiddle.net/gtza0uuL . Ce n'est pas avec .prop, mais je ne sais pas si cela peut être garanti. Remarque: vous ne pouvez pas non plus simplement faire .toLowerCase () car 'type' peut être indéfini.
xr280xr


6

Une solution non-jQuery ressemble beaucoup à une solution jQuery:

document.querySelector('#myinput').getAttribute('type') === 'checkbox'

2

Utilisez cette fonction:

function is_checkbox(selector) {
    var $result = $(selector);
    return $result[0] && $result[0].type === 'checkbox';
};

Ou ce plugin jquery:

$.fn.is_checkbox = function () { return this.is(':checkbox'); };

0
$('#myinput').is(':checkbox')

c'est le seul travail, pour résoudre le problème pour détecter si la case est cochée ou non. Il renvoie vrai ou faux, je le recherche pendant des heures et j'essaye tout, maintenant son travail pour être clair j'utilise EDG comme navigateur et W2UI


N'oubliez pas d'utiliser le refactor du code lorsque vous collez du code dans vos questions et réponses.
Andres Felipe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.