2009-09-21 19 views
98

¿Cómo puedo marcar marcar/desmarcar evento de <input type="checkbox" /> con jQuery?Catch marcado evento de cambio de una casilla de verificación

+0

Si está utilizando una relativamente nueva versión de jQuery, me gustaría utilizar el .on ('cambio', function() {...}) como se menciona en La respuesta de @ Daniel de Leon a continuación. Una ventaja, el oyente de eventos "activado" se vinculará a html generado dinámicamente. – BLang

Respuesta

127
<input type="checkbox" id="something" /> 

$("#something").click(function(){ 
    if($(this).is(':checked')) alert("checked"); 
}); 

Editar: Hacer esto no cogerá cuando la casilla de verificación cambia por otras razones que un clic, como usar el teclado. Para evitar este problema, escuche change en lugar de click.

Para marcando/desmarcando mediante programación, echar un vistazo a Why isn't my checkbox change event triggered?

+0

document.getElementById ('something'). Checked works, why $ ('# something'). Checked ¿no trabajo? – omg

+0

A su código le falta un párrafo, y realmente debería usar la forma jQuery de obtener el estado de verificación. –

+0

Porque $ ('# algo') devuelve un objeto jQuery no un ElementNode –

2

utilizar el evento clic para una mejor compatibilidad con MSIE

$(document).ready(function() { 
    $("input[type=checkbox]").click(function() { 
     alert("state changed"); 
    }); 
}); 
+0

¿Cómo juzgar si está marcado o no? – omg

+0

Necesito saber si un clic significa marcar o desmarcarlo. – omg

+1

puede usar $ (this) .is (': checked') para probar el estado del ítem que acaba de hacer clic –

17

Utilice el :checked para determinar el estado de la casilla de verificación:

$('input[type=checkbox]').click(function() { 
    if($(this).is(':checked')) { 
     ... 
    } else { 
     ... 
    } 
}); 
+2

necesita otro paréntesis en su condición ... if ($ (esto) ... –

+1

@Ty W - gracias, reparado – karim79

-2
$(document).ready(function(){ 
    checkUncheckAll("#select_all","[name='check_boxes[]']"); 
}); 

var NUM_BOXES = 10; 
// last checkbox the user clicked 
var last = -1; 
function check(event) { 
    // in IE, the event object is a property of the window object 
    // in Mozilla, event object is passed to event handlers as a parameter 
    event = event || window.event; 

    var num = parseInt(/box\[(\d+)\]/.exec(this.name)[1]); 
    if (event.shiftKey && last != -1) { 
    var di = num > last ? 1 : -1; 
    for (var i = last; i != num; i += di) 
     document.forms.boxes['box[' + i + ']'].checked = true; 
    } 
    last = num; 
} 
function init() { 
    for (var i = 0; i < NUM_BOXES; i++) 
    document.forms.boxes['box[' + i + ']'].onclick = check; 
} 

HTML:

<body onload="init()"> 
    <form name="boxes"> 
    <input name="box[0]" type="checkbox"> 
    <input name="box[1]" type="checkbox"> 
    <input name="box[2]" type="checkbox"> 
    <input name="box[3]" type="checkbox"> 
    <input name="box[4]" type="checkbox"> 
    <input name="box[5]" type="checkbox"> 
    <input name="box[6]" type="checkbox"> 
    <input name="box[7]" type="checkbox"> 
    <input name="box[8]" type="checkbox"> 
    <input name="box[9]" type="checkbox"> 
    </form> 
</body> 
+14

Hey! Amigo, ¿qué estás haciendo aquí? – omg

+0

Parece una selección de rango (es decir, verifica el primer elemento, mantenga presionada la tecla shift, marque la última, y ​​se marcan todas las que están entre ellas). Sin embargo, esto es mucho más de lo que la pregunta lo requiere. Sin embargo, falta algo de código, como checkUncheckAll(). – joelsand

3

Utilice el snipp de código siguiente et al .: lograr este

$('#checkAll').click(function(){ 
    $("#checkboxes input").attr('checked','checked'); 
}); 

$('#UncheckAll').click(function(){ 
    $("#checkboxes input").attr('checked',false); 
}); 

O usted puede hacer lo mismo con la única casilla de verificación:

$('#checkAll').click(function(e) { 
    if($('#checkAll').attr('checked') == 'checked') { 
    $("#checkboxes input").attr('checked','checked'); 
    $('#checkAll').val('off'); 
    } else { 
    $("#checkboxes input").attr('checked', false); 
    $('#checkAll').val('on'); 
    } 
}); 

Para demostración: http://jsfiddle.net/creativegala/hTtxe/

35

El clic afectará una etiqueta si tenemos una conectada a la casilla de entrada?

creo que es mejor usar la función .Cambiar()

<input type="checkbox" id="something" /> 

$("#something").change(function(){ 
    alert("state changed"); 
}); 
11

para jQuery 1.7+ uso:

$('input[type=checkbox]').on('change', function() { 
    ... 
}); 
3

En mi experiencia, he tenido que aprovechar currentTarget del evento :

$("#dingus").click(function (event) { 
    if ($(event.currentTarget).is(':checked')) { 
    //checkbox is checked 
    } 
}); 
1

Este código hace lo que su necesidad:

<input type="checkbox" id="check" >check it</input> 

$("#check").change(function(){ 
    if($(this).is(':checked')) { 
     alert("checked"); 
    }else{ 
     alert("unchecked"); 
    } 
}); 

Además, puede comprobarlo en jsfiddle

Cuestiones relacionadas