jQuery comprueba si una entrada es de tipo casilla de verificación?

151

Me gustaría saber si una entrada es una casilla de verificación o no, y lo siguiente no funciona:

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

¡Gracias otra vez!

Rio
fuente

Respuestas:

333

Puede usar el pseudo-selector :checkboxcon una llamada a la isfunción de jQuery :

$('#myinput').is(':checkbox')
Ken Browning
fuente
1
Este es el método que siempre uso.
Topher Fangio
Realmente no puedes ser más simple que eso.
KyleFarris
9
¿Por qué usar el motor selector para esto? Es completamente innecesario.
Tim Down
77
@Tim Down Supongo que puede haber formas más eficientes de lograr lo mismo. Supongo que me gusta esta versión porque el código es muy legible.
Ken Browning
2
@KenBrowning: bastante justo. Estaba bastante en contra de jQuery en 2009, particularmente la actitud SO predominante de usar ciegamente jQuery para todo; mis puntos de vista se han suavizado un poco desde entonces y deshacería mi voto negativo si fuera posible. Sin embargo, todavía creo que tenía un punto. Alternativa (que no puedo negar es más detallada):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"

O, más del estilo de jQuery:

$("#myinput").attr('type') == 'checkbox'
Esteban Küber
fuente
Perfectamente valido. No es el más simple.
KyleFarris
66
Se ahorra usando el motor selector de jQuery, cuyo uso aquí es completamente inapropiado. La primera variante es mucho mejor, ya que evita cualquier posibilidad de que la attr()función confusa de jQuery arruine algo.
Tim Down
3
@Tim Down es correcto: debes cambiar attr()a prop(), afaik. attr()no siempre obtiene el valor de atributo "real" (es decir, marcado o no) del navegador. Sinceramente, no estoy seguro de por qué este es el caso, pero lo aprendí hace un tiempo.
thekingoftruth
1
En Chome, su segundo ejemplo distingue entre mayúsculas y minúsculas: jsfiddle.net/gtza0uuL . No es con .prop, pero no sé si eso se puede garantizar. Nota: no puede hacer .toLowerCase () porque 'type' puede estar indefinido.
xr280xr
10
$("#myinput").attr('type') == 'checkbox'
caos
fuente
6

Una solución que no es jQuery es muy parecida a una solución jQuery:

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

Utiliza esta función:

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

O este complemento jquery:

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

este es el único trabajo, para resolver el problema para detectar si la casilla de verificación está marcada o no. Devuelve verdadero o falso, lo busco durante horas y lo intento todo, ahora está claro que uso EDG como navegador y W2UI

Code.king
fuente
Recuerde usar el código refactor cuando pegue código en sus preguntas y respuestas.
Andrés Felipe