Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] problema con operaciones datos dinamicos

Estas en el tema de problema con operaciones datos dinamicos en el foro de Jquery en Foros del Web. buenas tardes soy nuevo en el foro y llevo poco trabajando con javascript mi problema es que quiero hacer un tipo carrito de compras y ...
  #1 (permalink)  
Antiguo 02/12/2015, 14:06
 
Fecha de Ingreso: diciembre-2015
Ubicación: Pachuca Hidalgo
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 1
problema con operaciones datos dinamicos

buenas tardes soy nuevo en el foro y llevo poco trabajando con javascript mi problema es que quiero hacer un tipo carrito de compras y necesito multiplicar la cantidad de cada producto por su precio para despues mostrarlo pero no he podido hacerlo funcionar
este es mi codigo javascript:
Código:
<script type="text/javascript">
    $(document).ready(function(){
        $(".grupo").keyup(function()
        {
            var importe=$(this).find("input[name=precio]").value();
            var cantidad=$(this).find("input[name=cantidad]").value();
            $(this).find("[class=total]").html(parseInt(importe)*parseInt(cantidad));
 
            // calculamos el total de todos los grupos
            var total=0;
            $(".grupo .total").each(function(){
                total=total+parseInt($(this).html());
            })
            $(".total .total").html(total);
        });
    });
    </script>
y este es el html:
Código HTML:
<table width="90%" border="1" cellspacing="0">
  <tr>
    <th scope="col">nombre</th>
    <th scope="col">cantidad</th>
    <th scope="col">precio</th>
    <th scope="col">Subtotal</th>
  </tr>
    <?php do { ?>
    <div class="grupo"><tr>
      <td><?php echo $row_carrito['nombre_producto']; ?></td>
      <td><input  type="text" name="cantidad" value="<?php echo $row_carrito['cantidad'];?>"/></td>
      <td>$<input type="text" name="precio" value="<?php echo $row_carrito['precio'];?>"/></td>
      <td><span class="total">0</span></td>
    </tr></div>
    <?php } while ($row_carrito = mysql_fetch_assoc($carrito));  ?>
    <div class="total"><tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>total:</td>
      <td><div class="total"><span class="total">0</span></div></td>
    </tr>
    </div>
</table> 
todos los datos los muestra correctamente pero al momento de cambiar la cantidad de productos no hace nada... agradeceria mucho que pudieran ayudarme

Última edición por Osvaldo_Jacobo; 02/12/2015 a las 14:22
  #2 (permalink)  
Antiguo 02/12/2015, 18:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: problema con operaciones datos dinamicos

Bienvenido a Foros del Web.

El método de jQuery para obtener el valor de un elemento del formulario se llama .val(), no .value().

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 03/12/2015, 07:42
 
Fecha de Ingreso: diciembre-2015
Ubicación: Pachuca Hidalgo
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 1
Respuesta: problema con operaciones datos dinamicos

Lo he corregido como me dijiste y sigue sin funcionar
  #4 (permalink)  
Antiguo 03/12/2015, 10:42
 
Fecha de Ingreso: diciembre-2015
Ubicación: Pachuca Hidalgo
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 1
Respuesta: problema con operaciones datos dinamicos

logre hacerlo funcionar poniendo el class en la fila de la tabla en lugar de divs pero ahora mi problema es que al cargar la pagina los totales me aparecen en 0 y se actualizan hasta que pongo el foco en alguno de los textbox y presiono una tecla

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     $(document).ready(function(){
  3.         $(".grupo").keyup(function()
  4.         {
  5.             var importe=$(this).find("input[name=importe]").val();
  6.             var cantidad=$(this).find("input[name=cantidad]").val();
  7.             $(this).find("[class=total]").html(parseFloat(importe)*parseFloat(cantidad));
  8.  
  9.             // calculamos el total de todos los grupos
  10.             var total=0;
  11.             $(".grupo .total").each(function(){
  12.                 total=total+parseFloat($(this).html());
  13.             })
  14.             $(".total .total").html(total);
  15.         });
  16.     });
  17.     </script>


Código HTML:
Ver original
  1. <table width="90%" border="1" cellspacing="0">
  2.   <tr>
  3.     <th scope="col">nombre</th>
  4.     <th scope="col">cantidad</th>
  5.     <th scope="col">precio</th>
  6.     <th scope="col">Subtotal</th>
  7.   </tr>
  8.     <?php do { ?>
  9.   <tr class="grupo">
  10.       <td><?php echo $row_carrito['nombre_producto']; ?></td>
  11.       <td><input type="text" name="cantidad" value="<?php echo $row_carrito['cantidad']; ?>" /></td>
  12.       <td><input type="text" name="importe" value="<?php echo $row_carrito['precio']; ?>" /></td>
  13.       <td><span class="total">0</span></td>
  14.     </tr>
  15.     <?php } while ($row_carrito = mysql_fetch_assoc($carrito));  ?>
  16.     <tr class="total">
  17.       <td>&nbsp;</td>
  18.       <td>&nbsp;</td>
  19.       <td>total:</td>
  20.       <td class="total"><span class="total">0</span></td>
  21.     </tr>
  22.     </div>

asi quedo el codigo hasta el momento
  #5 (permalink)  
Antiguo 03/12/2015, 12:04
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: problema con operaciones datos dinamicos

Ese comportamiento es lógico. Fíjate que estableces el valor cero como total, mientras que el cálculo se realizará recién cuando se produzca el evento keyup en alguno de los bloques de clase "grupo". Si quieres que el cálculo se realice al cargar la página pero también cuando se produzca el evento keyup, te recomiendo tener una función con las instrucciones respectivas, de esta forma, la ejecutaría cuando cargue la página y cuando se produzca el evento keyup.

Código Javascript:
Ver original
  1. function calcular(){
  2.     //Instrucciones
  3. }
  4.  
  5. //Cuando cargue la página
  6. $(document).ready(function(){
  7.     //Ejecutas la función
  8.     calcular();
  9.  
  10.     //Y también la estableces para cuando se produzca el evento "keyup"
  11.     $(".grupo").keyup(calcular);
  12. });

Un saludo
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 03/12/2015, 12:19
 
Fecha de Ingreso: diciembre-2015
Ubicación: Pachuca Hidalgo
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 1
Respuesta: problema con operaciones datos dinamicos

ok perfecto ahora funciona correctamente muchas gracias ahora si no fuera molestia como podria hacer que el total me aparezca con 2 decimales ya que los precios que vienen de la base de datos algunos son con 2 decimales y al momento de que se hacen las operaciones se muestran con solo un decimal
  #7 (permalink)  
Antiguo 03/12/2015, 12:22
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: problema con operaciones datos dinamicos

Puedes utilizar el método .toFixed().
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 03/12/2015, 12:43
 
Fecha de Ingreso: diciembre-2015
Ubicación: Pachuca Hidalgo
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 1
Respuesta: problema con operaciones datos dinamicos

listo ya funciona todo muy bien muchas gracias por la ayuda...les dejo el codigo por si a alguien le sirve

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function calcular(){
  3.             var importe=parseFloat($(this).find("input[name=importe]").val());
  4.             var cantidad=$(this).find("input[name=cantidad]").val();
  5.             $(this).find("[class=total]").html((parseFloat(importe)*parseFloat(cantidad)).toFixed(2));
  6.  
  7.             // calculamos el total de todos los grupos
  8.             var total=0;
  9.             $(".grupo .total").each(function(){
  10.                 total=total+parseFloat($(this).html());
  11.             })
  12.             $(".total .total").html(total.toFixed(2));
  13.            
  14. }
  15. $(document).ready(function(){
  16.     calcular();
  17.  $(".grupo").keyup(calcular);
  18. });
  19.     </script>
Código HTML:
Ver original
  1. <table align="center" style="text-align:center;" width="90%" border="1" cellspacing="0">
  2.   <tr>
  3.     <th scope="col">nombre</th>
  4.     <th scope="col">cantidad</th>
  5.     <th scope="col">precio</th>
  6.     <th scope="col">Subtotal</th>
  7.   </tr>
  8.     <?php do { ?>
  9.   <tr class="grupo">
  10.       <td><?php echo $row_carrito['nombre_producto']; ?></td>
  11.       <td><input type="text" name="cantidad" value="<?php echo $row_carrito['cantidad']; ?>" autocomplete="off" /></td>
  12.       <td><input style="border:0; background:none; width:55px; text-align:center;" readonly="readonly" type="text" name="importe" value="<?php echo $row_carrito['precio']; ?>" /></td>
  13.       <td><span class="total"><?php echo $row_carrito['precio']; ?></span></td>
  14.     </tr>
  15.     <?php } while ($row_carrito = mysql_fetch_assoc($carrito));  ?>
  16.     <tr class="total">
  17.       <td>&nbsp;</td>
  18.       <td>&nbsp;</td>
  19.       <td>total:</td>
  20.       <td class="total"><span class="total">0</span></td>
  21.     </tr>
  22.     </div>

Última edición por Osvaldo_Jacobo; 03/12/2015 a las 13:02

Etiquetas: dinamicos, funcion, html, input, javascript, operaciones, 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 18:01.