2011-07-29 20 views
47

Necesito saber cuándo se marca una casilla de verificación en la página:Cómo escuchar cuando se marca una casilla de verificación en Jquery

p.

<input type="checkbox"> 

He intentado esto en Jquery

$('input type=["checkbox"]').change(function(){ 
alert('changed'); 
}); 

Pero no funcionó, alguna idea?

+0

El problema es que '$ ('input type = [ "casilla de verificación"]')' no es un selector válido. Debería ser '$ ('input [type = checkbox]')' en su lugar. Aún mejor sería '$ ('input: checkbox')'. ;) – CptRobby

Respuesta

10
$('input:checkbox').change(function(){ 
    if($(this).is(':checked')){ 
     alert('Checked'); 
    } 
}); 

Here is a demo

0
$("input[type='checkbox']").click(function(){ 
    alert("checked"); 
}); 

Sólo una normal de .click va a hacer.

19
$('input:checkbox').live('change', function(){ 
    if($(this).is(':checked')){ 
     alert('checked'); 
    } else { 
     alert('un-checked'); 
    } 
}); 

jsFiddle: http://jsfiddle.net/7Zg3x/1/

+0

¿Por qué '.live'? ¿Por qué no '.click'? – dotty

+7

Como no sé cómo y cuándo se agrega el elemento de entrada al dom, usar .live() para ejemplos los ayuda a ser relevantes incluso si se produce la inyección dinámica del elemento. En un sentido general, .live() se aplicará a los elementos "ahora y en el futuro" (como dicen los documentos) y .click() es un atajo para .bind ('clic', función() {}) que solo se aplica a elementos que ya están en el dom. – Jasper

+1

@Jasper: 'live' es mucho más lento que el enlace normal, porque el evento debería aparecer. Tiene mucho más sentido utilizar el evento 'change' vinculado directamente al elemento, si este último es estático. – Shef

84

Uso caso change(), y la prueba de is():

$('input:checkbox').change(
    function(){ 
     if ($(this).is(':checked')) { 
      alert('checked'); 
     } 
    }); 

He actualizado lo anterior, a lo siguiente, debido a mi tonta dependencia de jQuery (en el if) cuando las propiedades DOM serían igualmente apropiadas y también más económicas de usar. También el selector se ha cambiado, con el fin de permitir que se aprobó, en aquellos navegadores que lo soportan, a document.querySelectorAll() método del DOM:

$('input[type=checkbox]').change(
    function(){ 
     if (this.checked) { 
      alert('checked'); 
     } 
    }); 

En aras de finalización, lo mismo que también es fácilmente posible en llanura JavaScript:

var checkboxes = document.querySelectorAll('input[type=checkbox]'), 
    checkboxArray = Array.from(checkboxes); 

function confirmCheck() { 
    if (this.checked) { 
    alert('checked'); 
    } 
} 

checkboxArray.forEach(function(checkbox) { 
    checkbox.addEventListener('change', confirmCheck); 
}); 

Referencias:

+0

¿Puede garantizar que el evento de cambio solo se active en un cambio de estado de verificación, no en otros como visibilidad, etc.? – committedandroider

+0

@committedandroider: "* [¿Puedo] garantizar ...? *" - no, pero definitivamente diré que nunca he tenido un evento de cambio para otra cosa que no sea la interacción del usuario con la casilla de verificación o su elemento asociado '

2

probar este

$('input:checkbox').change(function(){ 
    if(this.checked) 
     alert('checked'); 
    else 
     alert('not checked'); 
}); 
Cuestiones relacionadas