Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Funcion que Aumenta no Suma

Estas en el tema de Funcion que Aumenta no Suma en el foro de Javascript en Foros del Web. Ya no se que paso ni por que lo hace pregunto por que me hace esto tengo un formulario que validadar donde paso parametros los ...
  #1 (permalink)  
Antiguo 17/08/2017, 18:48
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 88
Antigüedad: 6 años, 6 meses
Puntos: 2
Pregunta Funcion que Aumenta no Suma

Ya no se que paso ni por que lo hace pregunto por que me hace esto

tengo un formulario que validadar donde paso parametros los cuales quiero hacer una simple operacion como son varios uso un id para identificarlos y que sean diferentes para depsues hacer la operacion y mostrar bueno todo esta bien pero no se por que no lo suma y me hace cosa rara.

Mi input con PHP y resultado abajo...
Código HTML:
Ver original
  1. <input name="pago<?php echo $row_pendiente['idcliente']; ?>" type="text" id="pago<?php echo $row_pendiente['idcliente']; ?>" onKeyUp="valida(<?=$row_pendiente['saldo'].','.$cobro.','.$row_pendiente['idcliente']; ?>)" value="<?=$pago;?>">
  2.  
  3. <input name="pago4" type="text" id="pago4" onKeyUp="valida(182.00,350,4)" value="168">
Código Javascript:
Ver original
  1. function valida(saldo, cobro, id){
  2.     var valpago = calculo = pago = null;
  3.     pago = document.getElementById('pago'+id);
  4.     valpago = pago.value;
  5.  
  6.     calculo = saldo - cobro + valpago;
  7.    
  8.     document.getElementById('saldo'+id).value = calculo;

si yo pongo 200
lo que me hace esto con esos valores es ponerme en saldo id: -168200

y lo que tendria que hacer es
calculo = saldo - cobro + valpago;
32 = 182 - 350 + 200;


no -168200
__________________
Ing. Emilio Viguri de NEXCEN Visitamos en lo que podamos ayudarte.
  #2 (permalink)  
Antiguo 17/08/2017, 21:00
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 5.827
Antigüedad: 9 años, 9 meses
Puntos: 953
Respuesta: Funcion que Aumenta no Suma

el problema es bastante claro, estas usando input de texto por lo que al momento de querer sumar en realidad lo que haces es concatenar

182 - 350 = -168 este valor es convertido a texto y se concatena con tu 200 ya que es una cadena de texto lo que has enviado.

Tu solución es parseInt o parseFloat según el tipo de valor enviado, ya sea entero o con decimales según corresponda.

calculo = saldo - cobro + parseInt(valpago);// enteros

o bien
calculo = saldo - cobro + parseFloat(valpago); // con decimales
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #3 (permalink)  
Antiguo 18/08/2017, 14:21
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 88
Antigüedad: 6 años, 6 meses
Puntos: 2
De acuerdo Respuesta: Funcion que Aumenta no Suma

Bueno como pelicula de terror tengo un final feliz, a qui les dejo el codigo por si alguien lo quiere re utilizar funciona. Gracias aprendi algo nuevo !

Código Javascript:
Ver original
  1. function valida(saldo, cobro, id){
  2.     var varsaldo = pago = calculo = pago = null;
  3.     pago = document.getElementById('pago'+id);
  4.     varsaldo = document.getElementById('saldo'+id);
  5.    
  6.     calculo = saldo - cobro + parseFloat(pago.value);
  7.    
  8.     if(!isNaN(calculo)) varsaldo.value = calculo;
  9.     else varsaldo.value = 0;
  10.    
  11.     if(pago.value != ''){//Estilo Verde Bien
  12.         pago.style.color="#006600";
  13.         pago.style.background="#D9FFEC";
  14.         pago.style.border = "thin solid #006600";
  15.     }else{ // Estilos Rojos Errores
  16.         pago.style.background="#FFE1E1";
  17.         pago.style.color="#990000";
  18.         pago.style.border = "thin solid #990000";
  19.     }
  20.    
  21.     if(calculo>=0){//Estilo Verde Bien
  22.         varsaldo.style.color="#006600";
  23.         varsaldo.style.background="#D9FFEC";
  24.         varsaldo.style.border = "thin solid #006600";
  25.         document.getElementById('id_'+id).checked=true;
  26. //      document.getElementById('id_'+id).disabled=false;
  27. //      document.getElementById('submit_'+id).disabled=false;
  28.     }else{ // Estilos Rojos Errores
  29.         varsaldo.style.background="#FFE1E1";
  30.         varsaldo.style.color="#990000";
  31.         varsaldo.style.border = "thin solid #990000";
  32.         document.getElementById('id_'+id).checked=false;
  33. //      document.getElementById('id_'+id).disabled=true;
  34. //      document.getElementById('submit_'+id).disabled=true;
  35.     }
  36. }

Código HTML:
Ver original
  1. <input name="pago13" type="text" id="pago13" onKeyUp="valida(854.00,350,13)" value="0" size="5" maxlength="13">
  2. <input name="saldo13" type="text" id="saldo13" value="" size="5" maxlength="13" readonly>
  3. <input type="radio" name="idcliente" value="13" id="id_13">
  4. <input type="submit" value="Registra" id="submit_13">
__________________
Ing. Emilio Viguri de NEXCEN Visitamos en lo que podamos ayudarte.



La zona horaria es GMT -6. Ahora son las 04:48.