jQuery prüfen, ob eine Eingabe vom Typ Kontrollkästchen ist?

151

Ich möchte herausfinden, ob eine Eingabe ein Kontrollkästchen ist oder nicht, und Folgendes funktioniert nicht:

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

Vielen Dank noch mal!

Rio
quelle

Antworten:

333

Sie können den Pseudo-Selektor :checkboxmit einem Aufruf der isFunktion von jQuery verwenden:

$('#myinput').is(':checkbox')
Ken Browning
quelle
1
Dies ist die Methode, die ich immer benutze.
Topher Fangio
Einfacher geht es wirklich nicht.
KyleFarris
9
Warum dafür die Auswahlmaschine verwenden? Es ist völlig unnötig.
Tim Down
7
@ Tim Down Ich gehe davon aus, dass es effizientere Möglichkeiten gibt, dasselbe zu erreichen. Ich denke, ich mag diese Version, weil der Code sehr gut lesbar ist.
Ken Browning
2
@ KenBrowning: Fair genug. Ich war 2009 ziemlich anti-jQuery, insbesondere die vorherrschende SO-Einstellung, jQuery blind für alles zu verwenden; Meine Ansichten haben sich seitdem etwas gemildert und ich würde meine Ablehnung rückgängig machen, wenn es möglich wäre. Ich denke jedoch immer noch, dass ich einen Punkt hatte. Alternative (die ich nicht leugnen kann, ist ausführlicher):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"

Oder eher vom Stil von jQuery:

$("#myinput").attr('type') == 'checkbox'
Esteban Küber
quelle
Perfekt gültig. Nicht das einfachste.
KyleFarris
6
Es spart mit der Selector-Engine von jQuery, deren Verwendung hier völlig unangemessen ist. Die erste Variante ist umso besser, als die Möglichkeit vermieden wird, dass die verwirrte attr()Funktion von jQuery irgendetwas durcheinander bringt.
Tim Down
3
@ Tim Down ist richtig - du solltest attr()zu prop()afaik wechseln. attr()erhält nicht immer den "echten" Attributwert (dh aktiviert oder nicht aktiviert) vom Browser. Ehrlich gesagt nicht sicher, warum dies der Fall ist, aber ich habe das vor einiger Zeit gelernt.
thekingoftruth
1
In Chome unterscheidet Ihr zweites Beispiel zwischen Groß- und Kleinschreibung: jsfiddle.net/gtza0uuL . Es ist nicht mit .prop, aber ich weiß nicht, ob das garantiert werden kann. Hinweis: Sie können auch nicht einfach .toLowerCase () ausführen, da 'type' möglicherweise undefiniert ist.
xr280xr
10
$("#myinput").attr('type') == 'checkbox'
Chaos
quelle
6

Eine Nicht-jQuery-Lösung ähnelt einer jQuery-Lösung:

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

Verwenden Sie diese Funktion:

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

Oder dieses jquery Plugin:

$.fn.is_checkbox = function () { return this.is(':checkbox'); };
Anatoliy
quelle
0
$('#myinput').is(':checkbox')

Dies ist die einzige Arbeit, um das Problem zu lösen und festzustellen, ob das Kontrollkästchen aktiviert ist oder nicht. Es gibt wahr oder falsch zurück, ich suche es stundenlang und versuche alles, jetzt ist seine Arbeit klar, ich benutze EDG als Browser und W2UI

Code.king
quelle
Denken Sie daran, Code Refactor zu verwenden, wenn Sie Code in Ihre Fragen und Antworten einfügen.
Andres Felipe