Tengo lo siguiente:
<form id="myform">
<input type="checkbox" name="check1" value="check1">
<input type="checkbox" name="check2" value="check2">
</form>
¿Cómo uso jQuery para capturar cualquier evento de verificación que ocurra myform
y decir qué casilla de verificación se activó (y saber si se activó o desactivó)?
this
ya está configurado en el elemento DOM de la casilla de verificación, por lo quethis.checked
es suficiente. No necesitará crear otro objeto jQuery para él a menos que planee manipularlo.<label for='myInput'>Checkbox:</label><input id='myInput' name='myInput' type='checkbox'/>
) y hace clic en la etiqueta, se marcará la casilla de verificación, pero NO se llamará a esta función. Deberías usar el.change()
eventoUse el evento de cambio.
fuente
$("input[name=check1]").prop('checked', true)
. Ver jsfiddle.net/Z3E8V/2:checkbox
es una extensión jQuery y no forma parte de la especificación CSS, las consultas que se utilizan:checkbox
no pueden aprovechar el aumento de rendimiento proporcionado por elquerySelectorAll()
método DOM nativo . Para un mejor rendimiento en los navegadores modernos, utilícelo[type="checkbox"]
en su lugar".Hay varias respuestas útiles, pero ninguna parece cubrir todas las últimas opciones. Con ese fin, todos mis ejemplos también atienden la presencia de
label
elementos coincidentes y también le permiten agregar dinámicamente casillas de verificación y ver los resultados en un panel lateral (redirigiendoconsole.log
).Escuchar
click
eventos nocheckboxes
es una buena idea, ya que eso no permitirá alternar el teclado ni los cambios realizados cuando se hizo clic en un elemento coincidente . Siempre escucha el evento.label
change
Utilice el
:checkbox
pseudo-selector jQuery , en lugar deinput[type=checkbox]
.:checkbox
Es más corto y más legible.Úselo
is()
con el:checked
pseudo-selector jQuery para comprobar si una casilla de verificación está marcada. Esto está garantizado para funcionar en todos los navegadores.Controlador de eventos básico adjunto a elementos existentes:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/
Notas:
:checkbox
selector, que es preferible a usarinput[type=checkbox]
Controlador de eventos delegado adjunto al elemento ancestro:
Los controladores de eventos delegados están diseñados para situaciones en las que los elementos aún no existen (cargados o creados dinámicamente) y es muy útil. Se delegan la responsabilidad de un elemento ancestro (de ahí el término).
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/
Notas:
change
) que se propagan a un elemento ancestro que no cambia (en este caso#myform
).':checkbox'
en este caso) a sólo los elementos de la cadena de burbuja .document
como predeterminado para conectar el controlador de eventos delegado, si nada más está más cerca / conveniente.body
para adjuntar eventos delegados, ya que tiene un error (relacionado con el estilo) que puede evitar que reciba eventos del mouse.El resultado de los controladores delegados es que los elementos coincidentes solo deben existir en el momento del evento y no cuando el controlador de eventos se registró. Esto permite contenido agregado dinámicamente para generar los eventos.
P: ¿Es más lento?
R: Mientras los eventos estén a velocidades de interacción del usuario, no necesita preocuparse por la insignificante diferencia de velocidad entre un controlador de eventos delegado y un controlador conectado directamente. Los beneficios de la delegación superan con creces cualquier inconveniente menor. Los controladores de eventos delegados son en realidad más rápidos para registrarse, ya que generalmente se conectan a un único elemento coincidente.
¿Por qué no
prop('checked', true)
dispara elchange
evento?Esto es en realidad por diseño. Si desencadenara el evento, fácilmente se encontraría en una situación de actualizaciones interminables. En cambio, después de cambiar la propiedad marcada, envíe un evento de cambio al mismo elemento usando
trigger
(notriggerHandler
):por ejemplo, sin
trigger
que ocurra ningún eventoJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
por ejemplo, con
trigger
el evento de cambio normal se detectaJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
Notas:
triggerHandler
como lo sugirió un usuario, ya que no burbujeará eventos a un controlador de eventos delegado .JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/
aunque será trabajar para un controlador de eventos directamente conectada al elemento:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/
Referencia: http://api.jquery.com/triggerhandler/
Si alguien tiene características adicionales que considera que no están cubiertas por esto, sugiera adiciones .
fuente
Usando el nuevo método 'on' en jQuery (1.7): http://api.jquery.com/on/
fuente
$("input[name=check1]").prop('checked', true)
. Ver jsfiddle.net/Z3E8V/2.triggerHandler('change');
después de la.prop
llamada. Luego alternará la casilla Y llamará al evento.fuente
val()
no te dice sichecked
es asítrue
.Reconociendo el hecho de que el autor de la pregunta solicitó específicamente jQuery y que la respuesta seleccionada es correcta, debe tenerse en cuenta que este problema en realidad no necesita jQuery por palabra. Si uno desea resolver este problema sin él, simplemente puede establecer el
onClick
atributo de las casillas de verificación a las que desea agregar funcionalidad adicional, de esta manera:HTML:
javascript:
Violín: http://jsfiddle.net/Y9f66/1/
fuente
He probado el código desde la primera respuesta, no funciona, pero he jugado y esto funciona para mí
fuente