2010-12-14 9 views
20

Uso de AJAX Relleno un DIV con un montón de casillas de verificación (cada una con su propia identificación única). Los ID son "projectID1", "projectID2", "projectID3" y así sucesivamente ... He dado a todas las casillas de verificación una clase de "pChk".jQuery Show-Hide DIV basado en el valor de casilla de verificación

Mi objetivo final es mostrar el DIV que contiene el botón Enviar si CUALQUIERA de las casillas de verificación están marcadas. La única vez que se oculta el DIV que contiene el botón Enviar es si todas las casillas de verificación están desmarcadas.

Sin embargo, el código que he presentado a continuación muestra/oculta el botón de envío DIV para cada instancia de casilla de verificación. En otras palabras, si tengo tres casillas de verificación CHECKED y DESHECHO una de ellas, el botón Submit DIV se oculta.

¡Su asesoramiento de expertos es más que bienvenido!

function checkUncheck() { 
    $('.pChk').click(function() { 
     if (this.checked) { 
      $("#ProjectListButton").show(); 
     } else { 
      $("#ProjectListButton").hide(); 
     } 
    }); 
} 
+3

Recuerde que si usted * * muestran el botón de enviar con JS, también debe ocultar * * el botón con JS, por lo que las personas sin JavaScript habilitado puede * todavía * usar el formulario. Personas con lectores de pantalla, por ejemplo. –

+0

Posible duplicado de [Alternar div basado en el valor de la casilla] (http://stackoverflow.com/questions/4337378/toggle-div-based-on-checkbox-value) –

Respuesta

10

Esto es porque solo está marcando la casilla actual.

cambiarlo a

function checkUncheck() { 
    $('.pChk').click(function() { 
     if ($('.pChk:checked').length > 0) { 
      $("#ProjectListButton").show(); 
     } else { 
      $("#ProjectListButton").hide(); 
     } 
    }); 
} 

para comprobar si no se marca ninguna de las casillas de verificación (un montón de cheques en esta línea ..).

referencia: http://api.jquery.com/checked-selector/

+0

¡Muchas gracias! ¡Funciona como un amuleto! ¡Algunas personas lo consiguen mientras otros como yo luchamos! – mickormick

+0

Si eliminamos ".length> 0" no funcionará si hay 2 o más casillas de verificación y 2 o más contenidos para mostrar y ocultar. Pero si agregas ".length> 0", funciona como encanto. Puede explicar esta lógica (será simple pero no puedo entender). – Veer

+0

@veer porque '$ ('. PChk: checked')' siempre devuelve un objeto jquery independientemente de haber encontrado un elemento coincidente o no. Y los objetos se evalúan como verdaderos en las comprobaciones 'if'. –

2

Se podría considerar el uso de la :checked selector, proporcionado por jQuery. Algo como esto:

$('.pChk').click(function() { 
    if($('.pChk:checked').length > 0) { 
     $("#ProjectListButton").show(); 
    } else { 
     $("#ProjectListButton").hide(); 
    } 
}); 
+0

Usando este método yo mismo. – mirzu

48

Si bien esto es viejo si alguien se encuentra con esto de nuevo (a través de la búsqueda). La respuesta correcta con jQuery 1.7 en adelante es ahora:

$('.pChk').click(function() { 
    if($(this).is(':checked')) { 
     $("#ProjectListButton").show(); 
    } else { 
     $("#ProjectListButton").hide(); 
    } 
}); 
+4

Realmente no sé por qué esto es tan votado ... es incorrecto. Solo está verificando el ítem actual mientras que OP está pidiendo específicamente que el ocultamiento solo ocurra si los elementos *** ALL *** '.pChk' están desmarcados. Acaba de volver a escribir el código de la pregunta (* que es mejor debido al uso directo de 'this.checked' en lugar de su uso de jquery incluso para eso .. *) –

+0

Sí, está mal ... –

5

ebdiv se establece style="display:none;"

se obras muestran & ocultar

$(document).ready(function(){ 
    $("#eb").click(function(){ 
     $("#ebdiv").toggle(); 
    }); 

}); 
13

utilizo jQuery apuntalar

$('#yourCheckbox').change(function(){ 
    if($(this).prop("checked")) { 
    $('#showDiv').show(); 
    } else { 
    $('#hideDiv').hide(); 
    } 
}); 
0

Try

$('.yourchkboxes').change(function(){ 
    $('.yourbutton').toggle($('.yourchkboxes:checked').length > 0); 
}); 

Por lo tanto, se comprobará que al menos una casilla esté marcada o no.

2

Un consejo para todas las personas que usan el complemento plano-rojo, plano y verde, ¡debido a este complemento las respuestas anteriores no funcionarán!

En ese caso, use onchange = "do_your_stuff();" en la etiqueta, por ejemplo: Su casilla de verificación aquí

La razón por la que no funciona es que este Jquery crea una gran cantidad de objetos alrededor de la casilla de verificación real, por lo que no puede ver si ha cambiado o no.

Pero si alguien haga clic en la casilla de verificación recta, no va a funcionar: '(

Cuestiones relacionadas