si la casilla está marcada, haz esto

126

Cuando marco una casilla de verificación, quiero que se active <p> #0099ff.

Cuando desactivo la casilla de verificación, quiero que lo deshaga.

Código que tengo hasta ahora:

$('#checkbox').click(function(){
    if ($('#checkbox').attr('checked')) {
        /* NOT SURE WHAT TO DO HERE */
    }
}) 
android.nick
fuente
1
"... cuando no está marcada, para deshabilitar esa misma función". - la función pasada a .click()se invoca en el evento click. Por lo tanto, no entiendo lo que quiere decir con "habilitar" y "deshabilitar". Si la casilla está marcada, puede invocar la función a(). Pero debe escribir la función inversa para invocar cuando la casilla de verificación no está marcada. Estoy confundido.
jensgram
Puede, por supuesto, .bind()y .unbind()eventos a otro elemento en función del estado de la casilla de verificación. ¿Es eso lo que buscas?
jensgram
1
Perdón por el spam, pero he hecho un ejemplo de lo que estoy hablando.
jensgram
1
Sé que esta es una publicación antigua, pero ahora jQuery usa prop()para lo que esta pregunta quería usar attr(); el prop()método no se había creado en ese entonces. this.checkedSin embargo, las respuestas sobre probablemente todavía sean útiles.
trysis

Respuestas:

235

Yo usaría .change() y this.checked:

$('#checkbox').change(function(){
    var c = this.checked ? '#f00' : '#09f';
    $('p').css('color', c);
});

-

Sobre el uso de this.checked
Andy E, ha hecho una gran reseña sobre cómo tendemos a usar en exceso jQuery: utilizando el increíble poder de jQuery para acceder a las propiedades de un elemento . El artículo trata específicamente el uso de .attr("id")pero en el caso de que #checkbox es un <input type="checkbox" />elemento de la cuestión es la misma para $(...).attr('checked')(o incluso $(...).is(':checked')) vs. this.checked.

jensgram
fuente
48

Prueba esto.

$('#checkbox').click(function(){
    if (this.checked) {
        $('p').css('color', '#0099ff')
    }
}) 

A veces exageramos a jquery. Se pueden lograr muchas cosas usando jquery con javascript simple.

Chinmayee G
fuente
34

Puede suceder que "this.checked" esté siempre "activado". Por lo tanto, recomiendo:

$('#checkbox').change(function() {
  if ($(this).is(':checked')) {
    console.log('Checked');
  } else {
    console.log('Unchecked');
  }
});
Benny Neugebauer
fuente
En mi caso, acabo de cambiar para $(':checkbox')que funcione;)
Pathros
21

es mejor si define una clase con un color diferente, luego cambia la clase

$('#checkbox').click(function(){
    var chk = $(this);
    $('p').toggleClass('selected', chk.attr('checked'));
}) 

de esta manera su código está más limpio porque no tiene que especificar todas las propiedades de CSS (digamos que desea agregar un borde, un estilo de texto u otro ...) pero simplemente cambia una clase


fuente
44
+1 para solución genérica. Sin $('#checkbox').attr('checked')embargo, no hay razón para hacerlo si sabemos que #checkbox es una casilla de verificación (de lo contrario, la identificación es bastante engañosa). this.checkedlo haré
jensgram
@jensgram @fcalderan +1 ¡Gracias por la sugerencia! Nunca había visto alternar Clase con interruptor. Estoy borrando mi publicación porque es inútil. Lamento ser tan exigente, pero creo que esta respuesta sería 100% perfecta sin que se seleccione '#checkbox' dos veces: ¿tal vez use $ (this) en su lugar? ¿O la solución de jensgram?
ataque el
@ataque, por supuesto, puede almacenar en caché su elemento antes de usarlo (vea el código ahora). this.checked es incluso más rápido que $ (..). attr ('marcado')
4

Encontré una solución loca para tratar este problema de la casilla de verificación no marcada o marcada aquí es mi algoritmo ... crear una variable global, digamos var check_holder

check_holder tiene 3 estados

  1. estado indefinido
  2. 0 estado
  3. 1 estado

Si se hace clic en la casilla de verificación,

$(document).on("click","#check",function(){
    if(typeof(check_holder)=="undefined"){
          //this means that it is the first time and the check is going to be checked
          //do something
          check_holder=1; //indicates that the is checked,it is in checked state
    }
    else if(check_holder==1){
          //do something when the check is going to be unchecked
          check_holder=0; //it means that it is not checked,it is in unchecked state
    }
     else if(check_holder==0){
            //do something when the check is going to be checked
            check_holder=1;//indicates that it is in a checked state
     }
});

El código anterior se puede usar en muchas situaciones para averiguar si una casilla de verificación se ha marcado o no. El concepto detrás de esto es guardar los estados de las casillas de verificación en una variable, es decir, cuando está activado, desactivado. Espero que la lógica se pueda utilizar para resolver su problema.

zedecliff
fuente
1
La solución es realmente loca pero no en el buen sentido. Sí, las variables globales pueden ayudarlo a resolver un problema hoy, pero seguramente se convertirán en un problema para usted mañana. Intente evitarlos cuando sea posible, que es el 99% del tiempo. Hacen imposible razonar sobre su código sin preocuparse por el estado global. Una variable global puede parecer inocente, pero rápidamente se convierte en decenas y luego en cientos. He estado allí, visto eso y no es bonito.
bijancn
3

Comprueba este código:

<!-- script to check whether checkbox checked or not using prop function -->
<script>
$('#change_password').click(function(){
    if($(this).prop("checked") == true){ //can also use $(this).prop("checked") which will return a boolean.
        alert("checked");
    }
    else if($(this).prop("checked") == false){
        alert("Checkbox is unchecked.");
    }
});
</script>
Prabhjit Singh
fuente
1
$('#checkbox').change(function(){
   (this.checked)?$('p').css('color','#0099ff'):$('p').css('color','another_color');
});
Klaster_1
fuente
1

Probablemente pueda usar este código para realizar acciones cuando la casilla de verificación esté marcada o desmarcada.

$('#chk').on('click',function(){
    if(this.checked==true){
      alert('yes');
    }else{
      alert('no');
    }
});
Sanjiv Malviya
fuente
0

Implementación óptima

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});

Manifestación

$('#checkbox').on('change', function(){
    $('p').css('color', this.checked ? '#09f' : '');
});
<script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
<input id="checkbox" type="checkbox" /> 
<p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
    eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
<p>
    Ut enim ad minim veniam, quis nostrud exercitation ullamco
    laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
    dolor in reprehenderit in voluptate velit esse cillum dolore eu
    fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
    proident, sunt in culpa qui officia deserunt mollit anim id est
    laborum.
</p>

John Slegers
fuente
0

¿Por qué no utilizar los eventos integrados?

$('#checkbox').click(function(e){
    if(e.target.checked) {
     // code to run if checked
        console.log('Checked');

     } else {

     //code to run if unchecked
        console.log('Unchecked');
     }
});
Paul 501
fuente