jQuery sprawdzić, czy dane wejściowe to pole wyboru typu?

151

Chciałbym się dowiedzieć, czy dane wejściowe są polem wyboru, czy nie, a następujące elementy nie działają:

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

Dziękuję raz jeszcze!

Rio
źródło

Odpowiedzi:

333

Możesz użyć pseudo-selektora :checkboxz wywołaniem isfunkcji jQuery :

$('#myinput').is(':checkbox')
Ken Browning
źródło
1
To jest metoda, której zawsze używam.
Topher Fangio
Naprawdę nie ma nic prostszego.
KyleFarris
9
Po co w tym celu używać silnika selektora? To zupełnie niepotrzebne.
Tim Down
7
@Tim Down Rozumiem, że mogą istnieć skuteczniejsze sposoby osiągnięcia tego samego. Przypuszczam, że podoba mi się ta wersja, ponieważ kod jest bardzo czytelny.
Ken Browning
2
@KenBrowning: W porządku. W 2009 roku byłem raczej przeciwny jQuery, szczególnie powszechne podejście SO polegające na ślepym używaniu jQuery do wszystkiego; moje poglądy nieco złagodniały od tamtego czasu i cofnąłbym swój głos przeciw, gdyby to było możliwe. Jednak nadal uważam, że miałem rację. Alternatywa (której nie mogę zaprzeczyć, jest bardziej szczegółowa):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"

Lub więcej w stylu jQuery:

$("#myinput").attr('type') == 'checkbox'
Esteban Küber
źródło
Całkowicie ważne. Nie najprostsze.
KyleFarris
6
Oszczędza przy użyciu silnika selektora jQuery, którego użycie tutaj jest całkowicie niewłaściwe. Pierwszy wariant jest o wiele lepszy, ponieważ pozwala uniknąć jakiejkolwiek możliwości pomieszania attr()funkcji jQuery .
Tim Down
3
@Tim Down ma rację - powinieneś zmienić attr()na prop(), afaik. attr()nie zawsze pobiera "real" wartość atrybutu (tj. sprawdzoną lub nie) z przeglądarki. Szczerze nie wiem, dlaczego tak jest, ale dowiedziałem się tego jakiś czas temu.
thekingoftruth
1
W Chome w drugim przykładzie jest rozróżniana wielkość liter: jsfiddle.net/gtza0uuL . To nie jest z .prop, ale nie wiem, czy da się to zagwarantować. Uwaga: nie możesz po prostu zrobić .toLowerCase (), ponieważ „type” może być niezdefiniowany.
xr280xr
10
$("#myinput").attr('type') == 'checkbox'
chaos
źródło
6

Rozwiązanie inne niż jQuery jest podobne do rozwiązania jQuery:

document.querySelector('#myinput').getAttribute('type') === 'checkbox'
Jerzy
źródło
2

Użyj tej funkcji:

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

Lub ta wtyczka jquery:

$.fn.is_checkbox = function () { return this.is(':checkbox'); };
Anatolij
źródło
0
$('#myinput').is(':checkbox')

to jedyna praca polegająca na rozwiązaniu problemu w celu wykrycia, czy pole wyboru jest zaznaczone, czy nie. Zwraca prawdę lub fałsz, szukam go godzinami i próbuję wszystkiego, teraz jego praca jest jasna Używam EDG jako przeglądarki i W2UI

Code.king
źródło
Pamiętaj, aby podczas wklejania kodu do pytań i odpowiedzi użyć refaktoryzacji kodu.
Andres Felipe