Quiero que un evento active el lado del cliente cuando una casilla de verificación está marcada / desmarcada:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
Básicamente quiero que suceda para cada casilla de verificación en la página. ¿Este método de disparar con el clic y verificar el estado está bien?
Estoy pensando que debe haber una forma más limpia de jQuery. Alguien sabe una solución?
javascript
jquery
event-handling
AnonyMouse
fuente
fuente
Respuestas:
Enlace al
change
evento en lugar declick
. Sin embargo, es probable que aún deba verificar si la casilla está marcada o no:El principal beneficio de vincularse alRedactado en comentarioschange
evento sobre elclick
evento es que no todos los clics en una casilla de verificación harán que cambie de estado. Si solo desea capturar eventos que hacen que la casilla de verificación cambie de estado, desea elchange
evento con el nombre adecuado.También tenga en cuenta que he usado en
this.checked
lugar de envolver el elemento en un objeto jQuery y usar métodos jQuery, simplemente porque es más corto y más rápido acceder a la propiedad del elemento DOM directamente.Editar (ver comentarios)
Para obtener todas las casillas de verificación, tiene un par de opciones. Puede usar el
:checkbox
pseudo-selector:O podría usar un atributo igual selector:
fuente
$(this).is(':checked')
. Pensé que tenía que usar elchange
evento si desea detectar cambios desde el teclado (tabulación, presionar espacio), pero sorprendentemente,click
también detecta cambios que no son de un clic del mouse, no estoy seguro de si es una cosa de jQuery, jsfiddle.net / mendesjuan / E39szclick
,change
o lo que sea que todas las casillas de la página puede causar problemas de rendimiento (depepending de la cantidad de casillas de verificación). Intente vincular al elemento principal o al documento y capturar el evento burbujeado, es decir$('form').on('change', ':checkbox', function(){ //stuff });
Para futuras referencias a cualquier persona que tenga dificultades, si agrega las casillas de verificación dinámicamente, la respuesta correcta aceptada anteriormente no funcionará. Deberá aprovechar la delegación de eventos que permite que un nodo principal capture eventos burbujeados de un descendiente específico y emita una devolución de llamada.
Tenga en cuenta que casi siempre es innecesario usarlo
document
para el selector principal. En su lugar, elija un nodo principal más específico para evitar propagar el evento a demasiados niveles.El siguiente ejemplo muestra cómo los eventos de nodos dom añadidos dinámicamente no desencadenan oyentes definidos previamente.
Si bien este ejemplo muestra el uso de la delegación de eventos para capturar eventos para un nodo específico (
h1
en este caso) y emitir una devolución de llamada para tales eventos.fuente
Solo otra solucion
fuente
Si su intención es adjuntar un evento solo en las casillas de verificación marcadas (por lo que se activaría cuando se desmarquen y se verifiquen más tarde), entonces esto es lo que desea.
si su intención es adjuntar un evento a todas las casillas de verificación (marcadas y no marcadas)
si desea que se active solo cuando están siendo verificados (sin marcar), entonces @James Allardice responde arriba.
Por cierto
input[type='checkbox']:checked
es el selector de CSS.fuente
$("input[type='checkbox']:not(:checked)")
fuente
fuente
Quizás esta sea una alternativa para ti.
fuente
Esta es la solución para encontrar si la casilla está marcada o no. Use la función #prop () //
fuente
Prueba esta validación de jQuery
fuente
Es muy simple, esta es la forma en que uso:
JQuery:
¡Saludos!
fuente