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!

Rio
la source

Réponses:

333

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

$('#myinput').is(':checkbox')
Ken Browning
la source
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'
Esteban Küber
la source
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
10
$("#myinput").attr('type') == 'checkbox'
le chaos
la source
6

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

document.querySelector('#myinput').getAttribute('type') === 'checkbox'
George
la source
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'); };
Anatoliy
la source
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

Code.king
la source
N'oubliez pas d'utiliser le refactor du code lorsque vous collez du code dans vos questions et réponses.
Andres Felipe