Foros del Web » Programando para Internet » Jquery »

Error al sumar inputs dinámicos

Estas en el tema de Error al sumar inputs dinámicos en el foro de Jquery en Foros del Web. Hola, buenos días!! Tengo un error al querer sumar inputs que se crean dinámicamente cuando oprimes un botón ( + ). Les comento como funciona: ...
  #1 (permalink)  
Antiguo 17/02/2014, 11:49
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años, 6 meses
Puntos: 27
Error al sumar inputs dinámicos

Hola, buenos días!!

Tengo un error al querer sumar inputs que se crean dinámicamente cuando oprimes un botón (+). Les comento como funciona:

Tengo una función, que genera campos para desglozar el detalle de una factura. Al inicio aparece sólo un grupo de campos que incluyen el producto, la cantidad, la unidad y el precio unitario. A su vez tiene un botón + para agregar más registros.

Este código está combinado con Javascript y PHP y funciona correctamente. El código es el siguiente:

Código Javascript:
Ver original
  1. /* Creamos más inputs en formulario de forma dinámica [Para detalle personalizado] */      
  2.         $("#contenedor2").hide();
  3.        
  4.         $("#activarPer").change( function() {
  5.             var option = $(this).attr("checked");
  6.             if(option){ $("#contenedor2").show(); $("#contenedor").hide(); $("#activarCat").prop("checked", false); } else { $("#contenedor2").hide(); }
  7.         });
  8.        
  9.         var contenedor2       = $("#contenedor2");
  10.         var AddButton2       = $("#agregarCampo2");
  11.  
  12.         var x = $("#contenedor2 div").length;
  13.         var FieldCount2 = x-1;
  14.        
  15.         // Con esta función agregamos los campos
  16.         $(AddButton2).click(function (e) {
  17.             FieldCount2++;
  18.            
  19.             $(contenedor2).append('<div><?php include("bd/query-unidades.php"); ?> <input type="hidden" name="items[' + FieldCount2 + ']" id="items[' + FieldCount2 + ']" value="' + FieldCount2 + '"> <input type="text" name="setProducto[' + FieldCount2 + ']" id="setProducto[' + FieldCount2 +']" class="input-type-det-e" value="" placeholder="Producto/ Servicio"> <input type="text" name="setCantidad[' + FieldCount2 +']" id="setCantidad' + FieldCount2 + '" class="input-type-det-c" value="" placeholder="Cant"> <select name="setUnidad[' + FieldCount2 + ']" id="setUnidad[' + FieldCount2 + ']" class="input-type-det-c" ><option value="0">Unidad</option> <?php while($rowSelectUnidades = mysqli_fetch_array($sqlSelectUnidades, MYSQLI_ASSOC)) { ?><option value="<?php echo $rowSelectUnidades['id_unidad']; ?>"><?php echo utf8_encode($rowSelectUnidades['uds_unidad']); ?></option><?php } mysqli_free_result($sqlSelectUnidades); ?></select> <input type="text" name="setDescuento[' + FieldCount2 + ']" id="setDescuento' + FieldCount2 +  ' " class="input-type-det-c" value="" placeholder="Desc"> <select name="setExento[' + FieldCount2 + ']" id="setExento[' + FieldCount2 + ']" class="input-type-det-d"><option value="Normal">Normal</option><option value="Exento">Exento</option></select> <input type="text" name="setImporte[' + FieldCount2 + ']" id="setImporte[' + FieldCount2 + ']" class="input-type-det-c pu' + FieldCount2 + '" value="" placeholder="P.U."> <a href="#" class="eliminar2" title="ELIMINAR">[-]</a></div>');
  20.    
  21.    
  22.             x++;
  23.         });
  24.        
  25.        
  26.         // Con esta función eliminamos campos
  27.         $("body").on("click",".eliminar2", function(e){
  28.             if( x > 1 ) {
  29.                 $(this).parent('div').remove();
  30.                 x--;
  31.                 return FieldCount2--;
  32.             }
  33.             return false;
  34.         });

Ahora, quiero agregar una función para sumar los campos de precio unitario. He visto varios ejemplos en el foro y alrededor de internet pero no me funcionan... desconozco el porque aún :/

Intenté con esto:

Código Javascript:
Ver original
  1. var importes = new Array();
  2.            
  3. importes[FieldCount2] = document.getElementsByClassName('pu' + FieldCount2);
  4. alert(importes[FieldCount2]);

pero me regresa lo siguiente: [object Nodelist]

si lo pongo así:

Código Javascript:
Ver original
  1. var importes = new Array();
  2.            
  3. importes[FieldCount2] = parseFloat(document.getElementsByClassName('pu' + FieldCount2));
  4. alert(importes[FieldCount2]);

me regresa: NaN

y si hago esto:

Código Javascript:
Ver original
  1. var importe = $(".pu" + FieldCount2).val();
  2. alert(importe);

Me retorna vacío.

No me interesa mucho el camino a seguir, es decir, podría ser que al oprimir un botón me haga la suma de la factura o que cada que se oprima el botón +, se vayan sumando los importes y mostrar el total al final. El problema es que no puedo atrapar esos importes.

¿Alguna idea de que es lo que estoy haciendo mal? De antemano, agradezco sus comentarios.

Saludos!!
  #2 (permalink)  
Antiguo 18/02/2014, 11:19
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 11 años, 3 meses
Puntos: 29
Respuesta: Error al sumar inputs dinámicos

Voy a sumar los setImporte[].
Agrego class=suma.
Código HTML:
Ver original
  1. <input type="text" name="setImporte[' + FieldCount2 + ']" \n\
  2.           id="setImporte[' + FieldCount2 + ']" \n\
  3.           class="suma input-type-det-c pu' + FieldCount2 + '" \n\
  4.           value="" placeholder="P.U.">

Código Javascript:
Ver original
  1. //sumar valores setImporte[]
  2.   $(document).on("change", ".suma", function(e) {
  3.     e.preventDefault();
  4.     var suma = 0;
  5.     $(".suma").each(function() {
  6.       suma += parseFloat($(this).val());
  7.     });
  8.     $("#test").text(suma);
  9.   });
  10.   $(document).on("ready", inicio);
  11.   function inicio() {
  12.     $("#personalizar").on("click", transicion);
  13.   }

Código HTML:
Ver original
  1. <div id="test">test</div>
  #3 (permalink)  
Antiguo 18/02/2014, 13:19
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años, 6 meses
Puntos: 27
Respuesta: Error al sumar inputs dinámicos

Interesante... funciona muy bien tu código.

Sólo tengo una duda, sé que cometía un error o no estaba usando las funciones correctas, la duda es ¿que estaba haciendo mal con los métodos que utilicé?

Te agradezco por tu ayuda bathorz!! Saludos!!
  #4 (permalink)  
Antiguo 18/02/2014, 14:17
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 11 años, 3 meses
Puntos: 29
Respuesta: Error al sumar inputs dinámicos

Que me corrijan si me equivoco. A mi entender con:
importes[FieldCount2] = document.getElementsByClassName('pu' + FieldCount2);
Si: FieldCount2 = 0
Estás cargando por ej importes[0] con un objeto.
document.getElementsByClassName('pu' + FieldCount2) es un objeto.
Lo que necesitas es su valor (objeto.value).

Con: 'pu' + FieldCount2 --> obtienes las clases: pu1, pu2,...
De esta forma cada valor pertenece a una clase diferente.
Hay que obtener el listado de clases, sus valores y sumarlos, a mí se me complica hacerlo.

Por eso todos a una misma clase, o un mismo nombre, se arma el paquete, se recorre y se suman los valores.

NOTA: ya que vas a cargar con el peso de la librería jquery lo mejor es usarla todo lo que puedas en lugar de javascript.
  #5 (permalink)  
Antiguo 18/02/2014, 15:26
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años, 6 meses
Puntos: 27
Respuesta: Error al sumar inputs dinámicos

Suena lógico y me queda más claro.

Ahora lo que haré será obtener el importe, sumarle la cantidad, si hay descuento, descontárselo, si el producto es exento no aplicarle iva... prácticamente me pondré a jugar un rato con el código. ^^

Gracias bathorz!!

Etiquetas: formulario, funcion, input, inputs, javascript, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:10.