Pregunta jQuery: ¿cómo puedo seleccionar solo las casillas de verificación que están visibles y marcadas?


Estoy intentando verificar si todas las casillas de verificación visibles en una serie determinada están o no marcadas y pensé en solo contar las visibles y las que están visibles y verificadas para ver si los números son iguales. El problema es que no puedo hacer funcionar los selectores visibles ni comprobados.

Estas son algunas de las ideas que tuve pero no funcionó:

if($j("input[id^='chk_camp']:visible:checked").length == $j("input[id^='chk_camp']:visible").length)

ambos lados son 0 en este caso

if($j("input[id^='chk_camp']").filter(':visible').filter(':checked').length == $j("input[id^='chk_camp']").filter(':visible').length)

también devolvió 0 en ambos lados.

También probado

if($j("input[id^='chk_camp'][visible][checked]").length == $j("input[id^='chk_camp'][visible]").length)

y esto también devuelve 0 en ambos lados.

Como una nota $j("input[id^='chk_camp']").length devuelve el valor correcto. También el navegador con el que estoy trabajando es Firefox.

¿Qué estoy haciendo mal aquí?

Respuesta: Aparentemente, lo que estoy haciendo mal está en otro lado. Estaba haciendo estas comprobaciones antes de hacer realmente visible el div que contenía las casillas de verificación para que todas las comprobaciones de visibilidad fueran falsas.


5
2018-05-20 08:40


origen


Respuestas:


Podrías hacer algo como esto:

jsfiddle

jQuery:

$('input').each(function() {

    // If input is visible and checked...
    if ( $(this).is(':visible') && $(this).prop('checked') ) {

        $(this).wrap('<div />');

    }

});

HTML:

<input type="checkbox" checked="checked">
<input type="checkbox" checked="checked" style="display: none;">
<input type="checkbox">
<input type="checkbox" checked="checked" style="display: none;">
<input type="checkbox" checked="checked">
<input type="checkbox">

CSS:

div { float: left; background: green; }
div input { display: block !important; }

6
2018-05-20 08:53



Esto funciona bien para mi.

$(".inputClass:checked:visible");
$(".inputClass:checked:visible").length;

O adaptando la respuesta anterior.

jsfiddle

$('input:visible:checked').each(function() {
    $(this).wrap('<div />');
});

6
2017-11-25 14:42



Esto es incorrecto:

if($j("input[id^='chk_camp']").filter(':visible').filter(':checked).length == $j("input[id^='chk_camp']).filter(':visible').length)
//                                                          ------^------ missing qoutes here      ----^--- also double quotes here

2
2018-05-20 08:45