jQuery verificar se uma entrada é do tipo checkbox?

151

Gostaria de descobrir se uma entrada é uma caixa de seleção ou não, e o seguinte não funciona:

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

Agradeço novamente!

Rio
fonte

Respostas:

333

Você pode usar o pseudo-seletor :checkboxcom uma chamada para a isfunção do jQuery :

$('#myinput').is(':checkbox')
Ken Browning
fonte
1
Esse é o método que eu sempre uso.
Topher Fangio
Você realmente não pode ser mais simples do que isso.
KyleFarris
9
Por que usar o mecanismo seletor para isso? É completamente desnecessário.
Tim Baixo
7
@ Tim Down Considero que pode haver maneiras mais eficientes de realizar a mesma coisa. Suponho que gosto desta versão porque o código é muito legível.
27511 Ken Browning
2
@ KenBrowning: Justo o suficiente. Eu era bastante anti-jQuery em 2009, particularmente a atitude predominante de SO de usar cegamente o jQuery para tudo; minhas opiniões diminuíram um pouco desde então e eu desfiz meu voto negativo, se fosse possível. No entanto, ainda acho que tinha razão. Alternativa (que eu não posso negar é mais detalhada): #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, mais do estilo do jQuery:

$("#myinput").attr('type') == 'checkbox'
Esteban Küber
fonte
Perfeitamente válido. Não é o mais simples.
KyleFarris 28/09/2009
6
Ele salva usando o mecanismo seletor do jQuery, cujo uso aqui é completamente inapropriado. A primeira variante é muito melhor, pois evita qualquer possibilidade de a attr()função confusa do jQuery atrapalhar qualquer coisa.
Tim Baixo
3
@ Tim Down está certo - você deve mudar attr()para prop()afaik. attr()nem sempre obtém o valor do atributo "real" (ou seja, verificado ou não) no navegador. Honestamente, não sei por que esse é o caso, mas aprendi isso há um tempo.
thekingoftruth
1
No Chome, seu segundo exemplo faz distinção entre maiúsculas e minúsculas: jsfiddle.net/gtza0uuL . Não é com .prop, mas não sei se isso pode ser garantido. Nota: você não pode simplesmente fazer .toLowerCase () porque 'type' pode estar indefinido.
xr280xr
10
$("#myinput").attr('type') == 'checkbox'
caos
fonte
6

Uma solução não-jQuery é muito parecida com uma solução jQuery:

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

Use esta função:

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

Ou este plugin jquery:

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

este é o único trabalho para resolver o problema e detectar se a caixa de seleção está marcada ou não. Retorna verdadeiro ou falso, pesquiso por horas e tento de tudo, agora é claro que eu uso EDG como navegador e W2UI

Code.king
fonte
Lembre-se de usar o refator de código ao colar o código nas suas perguntas e respostas.
Andres Felipe