Estoy trabajando en una configuración en la que tengo varias filas en una tabla que solicitan entradas numéricas. Quiero deshabilitar el resto de los cuadros de texto tan pronto como la suma llegue a 100.

Mi alerta en condiciones funciona bien pero no puedo seleccionar los cuadros de texto vacíos para deshabilitarlos. Además, la alerta solo funciona si ingreso 100 en el primer cuadro de entrada. Para el resto de las cajas, incluso la alerta no funciona.

Por favor ayuda, a continuación está mi código

function checkTotal() {
    var sum=0;
    $("#fieldset_Q14 table tbody tr").each(function() {
        sum += parseInt($(this).find("input:text:last").val());
        if (sum==100) {
            //alert("test");
            $("input:text[value='']").prop('disabled',true);
        }
        else{
            $("input:text[value='']").prop('disabled',false);
        }
    })
}

$(document).ready(checkTotal);
$("input:text").keyup(checkTotal);
1
Vaibhav Luthra 12 may. 2016 a las 15:44

3 respuestas

La mejor respuesta

El problema fue con esta línea de código.

sum += parseInt($(this).find("input:text:last").val());

Cuando parseInt vacíe los cuadros de texto, devolverá NaN . Por lo tanto, debe tener cuidado de devolver 0 en caso de Nan. Cambie la línea de arriba a

sum += parseInt($(this).find("input:text:last").val()) || 0;

También debe filtrar todos los inputs que están vacíos utilizando este código

$('input:text').filter(function() { return $(this).val() == ""; })

Y luego deshabilitarlo ...

Aquí hay un Working Fiddle

0
Rajshekar Reddy 12 may. 2016 a las 13:42

Su suma no funciona porque cuando intenta sumar valores vacíos genera un resultado NaN. Además, puede comparar el resultado después del cálculo de la suma completa.

function checkTotal() {
var sum=0;
$("#fieldset_Q14 table tbody tr").each(function() {
    var num = parseInt($(this).find("input:text:last").val()) || 0;
    sum += parseInt(num);
});
if (sum==100) {
  $('input:text').filter(function() { return this.value == ""; }).prop('disabled',true);
}
else {
  $('input:text').filter(function() { return this.value == ""; }).prop('disabled',false);
}

}

Consulte https://jsfiddle.net/p556xprt/ para ver un ejemplo de trabajo.

0
Nicolas Gordillo 12 may. 2016 a las 13:38

Pruebe con este código, creo que este código será necesario para su requisito :)

            function checkTotal() {
                var sum=0;
                $("#fieldset_Q14 table tbody tr").each(function() {
                    sum += parseInt($(this).find("input:text:last").val());
                    if (sum==100) {
                        //alert("test");
                        $("input").each(function(){
                            if($(this).val() == '')
                                $(this).prop('disabled', true);
                        });
                    }
                    else{
                        $("input").each(function(){
                            if($(this).val() == '')
                                $(this).prop('disabled', false);
                        });
                    }
                });
            }
0
The Developer 12 may. 2016 a las 13:12