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 myformy decir qué casilla de verificación se activó (y saber si se activó o desactivó)?

thisya está configurado en el elemento DOM de la casilla de verificación, por lo quethis.checkedes 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:checkboxes una extensión jQuery y no forma parte de la especificación CSS, las consultas que se utilizan:checkboxno 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
labelelementos coincidentes y también le permiten agregar dinámicamente casillas de verificación y ver los resultados en un panel lateral (redirigiendoconsole.log).Escuchar
clickeventos nocheckboxeses 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.labelchangeUtilice el
:checkboxpseudo-selector jQuery , en lugar deinput[type=checkbox].:checkboxEs más corto y más legible.Úselo
is()con el:checkedpseudo-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:
:checkboxselector, 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 .documentcomo predeterminado para conectar el controlador de eventos delegado, si nada más está más cerca / conveniente.bodypara 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 elchangeevento?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
triggerque ocurra ningún eventoJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
por ejemplo, con
triggerel evento de cambio normal se detectaJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
Notas:
triggerHandlercomo 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.propllamada. Luego alternará la casilla Y llamará al evento.fuente
val()no te dice sicheckedes 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
onClickatributo 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