entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Como simplificar una recopilacion de valores con Jquery?

Veran amigos tengo n cantidad de campos.. donde primero al desactivarse se activa una funcion:

$("#inAutoproduccionInversion").on("blur", sumarInversion);
$("#inAmpliacionInversion").on("blur", sumarInversion);
$("#inMejoramientosInversion").on("blur", sumarInversion);
$("#inViviendaNuevaInversion").on("blur", sumarInversion);
$("#inAdquisicionLoteInversion").on("blur", sumarInversion);
$("#inOtroTipoAccionInversion").on("blur", sumarInversion);

Despues de eso debo de tomar los valores en una funcion y sumarlos.

function sumarInversion(){

    $valores = new Array();

    $valores[0] = parseInt($("#inAutoproduccionInversion").val());
    $valores[1] = parseInt($("#inAmpliacionInversion").val());
    $valores[2] = parseInt($("#inMejoramientosInversion").val());
    $valores[3] = parseInt($("#inViviendaNuevaInversion").val());
    $valores[4] = parseInt($("#inAdquisicionLoteInversion").val());
    $valores[5] = parseInt($("#inOtroTipoAccionInversion").val());

    //console.log($valores);

    $suma = 0;
    $.each($valores, function($index, $valor){
        console.log("valor" + $index + "es:" +$valor)
        if(isNaN($valor)){
            $suma = $suma + 0;
        }
        else {
            $suma = $suma + $valor;
        }
        //console.log($suma);
        });

    $("#inTotalInversion").val($suma);

}

¿como le hago para tomar N cantidad de campos? (es que no quiero estar definiendo uno por uno)

el comun entre ellos es que empiezan con "in" y terminan con "Inversion".

0voto

elporfirio comentado

Agrego no se si sea posible algo como

$.each("form-datosA input[type=number]"){
        if($(this).attr("name")... //aqui me quede
}

algo como que el attr name termine en "Acciones".

2 Respuestas

1voto

Leonardo-Tadei Puntos227020

Hola Porfirio,

podrías asignar una clase a los INPUT y recorrer los elementos de dicha clase. Te dejo un ejemplo de código:

$("#in1").on("blur", sumarInversion);
$("#in2").on("blur", sumarInversion);
$("#in3").on("blur", sumarInversion);
$("#in4").on("blur", sumarInversion);

function sumarInversion(){

    var suma = 0;
    elements = $('.sumar');
    elements.each(function(i,v) { 
//alert('entra '+v);
        if(v.value != '' && ! isNaN(v.value)){
            suma = parseFloat(suma) + parseFloat(v.value);
        }

        document.getElementById("resultado").innerHTML = suma;
                             });
}

Lo podés ver funcinando en http://jsfiddle.net/M86s8/3/

Saludos cordiales!

1voto

elporfirio Puntos2450

Gracias leonardo tadei me cayo de perlas he implemente un selector que captara todas las inversiones.

$("input[name$='Inversion']" ).on("blur", sumarInversion);

Aquí el Fiddle: http://jsfiddle.net/elporfirio/R7V5p/ corriendo y adaptable para cualquier cantidad de campos.. (por si derrepente se le ocurre agregar campos dinamicos).

Saludos

0voto

Leonardo-Tadei comentado

Me alegra que te sirviera!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta