Foros del Web » Programando para Internet » Jquery »

Error en variables jQuery

Estas en el tema de Error en variables jQuery en el foro de Jquery en Foros del Web. Buenos días, Tengo un problema con un script de jQuery, pero no localizo el error. Les explico: Tengo un formulario en el cuál se agregan ...
  #1 (permalink)  
Antiguo 21/03/2014, 11:32
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Error en variables jQuery

Buenos días,

Tengo un problema con un script de jQuery, pero no localizo el error. Les explico:

Tengo un formulario en el cuál se agregan dinámicamente campos para incluir información en un pedido:

Código HTML:
<input type="hidden" name="items[0]" id="items[0]" class="items" value="0"> 
<input type="text" name="setProducto[0]" id="setProducto[0]" class="input-type-det-e" value="" placeholder="Producto/ Servicio" >
<input type="text" name="setCantidad[0]" id="setCantidad[0]" class="cantidad input-type-det-c" value="" placeholder="Cant">
<select name="setUnidad[0]" id="setUnidad[0]" 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[0]" id="setDescuento[0]" class="desc input-type-det-c" value="0.00" placeholder="Desc">
<select name="setExento[0]" id="setExento[0]" class="exento input-type-det-d">
         <option value="Normal">Normal</option>
         <option value="Exento">Exento</option>                                        
</select>
<input type="text" name="setImporte[0]" id="setImporte[0]" class="suma input-type-det-c" value="" placeholder="P.U.">                                        
<label><a id="agregarCampo2" class="btn btn-info" href="#" title="AGREGAR">[+]</a></label> 
y con este script, calculo el importe total del pedido:

Código Javascript:
Ver original
  1. $("#calcular").click( function(e){
  2.                
  3.     var importes = new Array();
  4.     var cantidad = new Array();
  5.     var descuento = new Array();           
  6.     var exento = new Array();                      
  7.                
  8.     var i = 0;
  9.         $(".suma").each(
  10.             function(index, value) {
  11.                 importes[i] = eval($(this).val());
  12.                 i++;           
  13.             }
  14.         );
  15.     var j = 0;
  16.         $(".cantidad").each(
  17.             function(index, value) {
  18.                 cantidad[j] = eval($(this).val());
  19.                 j++;           
  20.             }
  21.         );
  22.                
  23.     var k = 0;
  24.         $(".desc").each(
  25.             function(index, value) {
  26.                 descuento[k] = eval($(this).val());
  27.                 k++;           
  28.             }
  29.         );
  30.                
  31.     var l = 0;
  32.         $(".exento").each(
  33.             function(index, value) {
  34.                 if($(this).val() == 'Normal') {
  35.                     exento[l] = 1.16;
  36.                 } else {
  37.                     exento[l] = 0;                     
  38.                 }
  39.                 l++;           
  40.             }
  41.         );
  42.                
  43.         var subtotal_pedido = 0;
  44.         var total_pedido = 0;
  45.         var total_iva = 0;
  46.                
  47.         for(i=0; i<importes.length; i++ ){
  48.            
  49.             importe = ((importes[i] * cantidad[i]) - descuento[i]);
  50.             subtotal_pedido = subtotal_pedido + (((importes[i] * cantidad[i]) - descuento[i]));
  51.             if(exento[i] > 0) {
  52.                 iva = (importe * exento[i]) - importe;             
  53.             } else {
  54.                 iva = 0;               
  55.             }
  56.             total_iva = total_iva + iva;
  57.             }
  58.             total_pedido = subtotal_pedido + total_iva;
  59.             alert('Subtotal: ' + subtotal_pedido + '  Iva: ' + total_iva + ' Total: ' + total_pedido);
  60. });

Funciona muy bien, sin problemas, sin embargo:

Todo el primer formulario, sirve para ingresar artículos de forma personalizada, es decir, escribes el nombre del artículo, la cantidad, el precio, etc., el siguiente formulario es para artículos previamente dados de alta en un catálogo, los cuales ya incluyen el precio y el nombre del artículo:

Código HTML:
<select name="producto[0]" id="p_0" class="articulos input-type-det-b">
         <option value="0">Producto/ Servicio</option>
         <?php while($rowSelectProductos = mysqli_fetch_array($sqlSelectProductos, MYSQLI_ASSOC)) { ?>
         <option value="<?php echo $rowSelectProductos['id_catalogo']; ?>" data-target="<?php echo $rowSelectProductos['cat_precio_unitario']; ?>">
  	 <?php echo $rowSelectProductos['cat_titulo'] . ' | $' . number_format($rowSelectProductos['cat_precio_unitario'], 2); ?>
         </option>
         <?php } mysqli_free_result($sqlSelectProductos); ?>
</select>
<input type="text" name="cantidad[0]" id="c_0" class="cantidades input-type-det-c" value="" placeholder="Cant">
<input type="text" name="descuento[0]" id="d_0" class="descuentos input-type-det-c" value="0.00" placeholder="Desc">
<select name="exento[0]" id="e_[0]" class="exentos input-type-det-d">
       	<option value="Normal">Normal</option>
       	<option value="Exento">Exento</option>                                        
</select>
<label><a id="agregarCampo" class="btn btn-info" href="#" title="AGREGAR">[+]</a></label> 
entonces, para calcular este catálogo uso la misma instrucción de jQuery arriba mencionada, obviamente sólo cambiando los nombres de las clases:

Código Javascript:
Ver original
  1. // Cálculo de factura por catálogo
  2. $("#calcular2").click( function(e){
  3.                
  4.         var importes2 = new Array();
  5.         var cantidad2 = new Array();
  6.         var descuento2 = new Array();          
  7.         var exento2 = new Array();                     
  8.                
  9.         alert("llego");
  10.                
  11.         var i = 0;
  12.         $(".articulos").each(
  13.             function(index, value) {
  14.                 importes2[i] = eval($(this).val());
  15.                 i++;   
  16.                 alert(importes2[i]);       
  17.             }
  18.         );
  19. });

y es aquí donde vienen los problemas... por ejemplo en la función donde se obtienen los artículos (.articulos), me marca como indefinido importes2[i], no me trae los valores. Si la variable la configuro no como un arreglo si me trae esos valores, pero yo la necesito como arreglo. Y esto me sucede con los demás campos (clases cantidades, descuentos, exentos) de este formulario.

Llevo un rato tratando de identificar el porqué, pero aún no lo logro :/

Ahora, por otro lado, una vez trayendo los valores, en importes2[i] = eval($(this).val()); no me interesa obtener el valor que tiene el value del input, sino el texto que contienen los options, esto es porque ahí vienen los precios de los artículos.

Ya revisé algunos métodos en internet, pero no me funcionan cuando traigo campos dinámicamente, sólo lo obtienen si es un campo fijo.

Estos son los botones para realizar el cálculo:

Código HTML:
<input type="button" name="calcular" id="calcular" value="Calcular" >
<input type="button" name="calcular2" id="calcular2" value="Calcular" > 
No sé si me expliqué bien con todo esto, de todas formas les agradezco por sus comentarios.

Saludos!!
  #2 (permalink)  
Antiguo 23/03/2014, 15:18
Avatar de codeams  
Fecha de Ingreso: diciembre-2012
Ubicación: México
Mensajes: 103
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Error en variables jQuery

Hola, haré lo que pueda por ayudar:
1. ¿Los botones son añadidos dinámicamente?
2. ¿Qué es lo que esta saliendo mal? ¿Algún valor da cero? ¿El script se detiene? ¿Qué es lo que sucede?

Estaré al pendiente de tu respuesta.
__________________
¿Quién es codeams? codeams.ml
¿Qué hace en su tiempo libre? codepen.io/codeams
  #3 (permalink)  
Antiguo 24/03/2014, 10:01
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Error en variables jQuery

Hola codeams, gracias por responder :D

No marca ningún error, simplemente no obtiene los datos, los marca como indefinidos.

Ya localicé que estaba fallando, los i++ que coloqué estaban de más, al eliminarlos funcionó y ya trae los valores ^^

Ahora sólo me falta resolver un punto: En el siguiente select:

Código HTML:
<select name="producto[0]" id="p_0" class="articulos input-type-det-b">
         <option value="0">Producto/ Servicio</option>
         <?php while($rowSelectProductos = mysqli_fetch_array($sqlSelectProductos, MYSQLI_ASSOC)) { ?>
         <option value="<?php echo $rowSelectProductos['id_catalogo']; ?>" data-target="<?php echo $rowSelectProductos['cat_precio_unitario']; ?>">
  	 <?php echo $rowSelectProductos['cat_titulo'] . ' | $' . number_format($rowSelectProductos['cat_precio_unitario'], 2); ?>
         </option>
         <?php } mysqli_free_result($sqlSelectProductos); ?>
</select> 
Necesito, obtener el valor del option, más no del value intenté de esta forma:

Código Javascript:
Ver original
  1. var i = 0;
  2.  $(".articulos").each(
  3.        function(index, value) {
  4.            importes2[i] = eval($(".articulos option:selected").text());  
  5.            alert(importes2[i]);        
  6.        }
  7. );

pero veo que no es la opción correcta. ¿Alguna idea? Mientras sigo intentando ^^

Saludos!!
  #4 (permalink)  
Antiguo 24/03/2014, 16:53
Avatar de codeams  
Fecha de Ingreso: diciembre-2012
Ubicación: México
Mensajes: 103
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Error en variables jQuery

Por lo que entendí buscas el valor del atributo value
Código Javascript:
Ver original
  1. $('option').each(function(){
  2.     value = $(this).attr('value'); //Esto te dirá el valor del atributo value
  3. });

¿A esto te refieres?
__________________
¿Quién es codeams? codeams.ml
¿Qué hace en su tiempo libre? codepen.io/codeams
  #5 (permalink)  
Antiguo 24/03/2014, 17:00
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Error en variables jQuery

No, la del option, por ejemplo:

Yo tengo el select que muestra la información de esta forma:

Código HTML:
<option value="Aquí va un id traído de una bd">Aquí hay información acerca de ese id</option> 
literalmente sería, por citar un ejemplo:

Código HTML:
<option value="5">Memoria RAM | $850.00</option> 
Lo que necesito obtener es "Memoria RAM | $850.00".

Saudos!!
  #6 (permalink)  
Antiguo 24/03/2014, 17:08
Avatar de codeams  
Fecha de Ingreso: diciembre-2012
Ubicación: México
Mensajes: 103
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Error en variables jQuery

Asi de claro debiste ser en un principio XD
Dado que solo pones texto en los <option> no veo problema en usar html()

Código HTML:
Ver original
  1. <option>texto</option>

Código Javascript:
Ver original
  1. $(function(){
  2.     h = $('option').html(), //Esto regresará el texto que buscas
  3.     t = $('option').text(); //Esto también
  4.     console.log(t+', '+h);
  5. })
__________________
¿Quién es codeams? codeams.ml
¿Qué hace en su tiempo libre? codepen.io/codeams
  #7 (permalink)  
Antiguo 24/03/2014, 17:29
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Error en variables jQuery

Casi funcionó bien :P

Te explico que pasó:

Yo tengo el select y selecciono estos artículos, como son inputs dinámicos que añado, puedo seleccionar más de uno, posteriormente los almaceno en un arreglo para hacer el cálculo de ellos:

Código HTML:
<option value="5">Memoria RAM | $850.00</option> 
<option value="6">Disco Duro | $1,200.00</option> 
Con la función de jQuery así:

Código Javascript:
Ver original
  1. var i = 0;
  2. $(".articulos").each(
  3.     function(index, value) {
  4.         importes2[i] = $('.articulos option:selected').text();
  5.         alert(importes2[i]);
  6.     }
  7. );

me da 2 ventanas de alerta que muestran:

ventana1:
Memoria RAM | $850.00 Disco Duro | $1,200.00
ventana2
Memoria RAM | $850.00 Disco Duro | $1,200.00

Sí modifico la función y pongo html en lugar de text:

Código Javascript:
Ver original
  1. var i = 0;
  2. $(".articulos").each(
  3.     function(index, value) {
  4.         importes2[i] = $('.articulos option:selected').html();
  5.         alert(importes2[i]);
  6.     }
  7. );

ventana1:
Memoria RAM | $850.00
ventana2
Memoria RAM | $850.00

lo que me debería dar es lo siguiente:

ventana1:
Memoria RAM | $850.00
ventana2:
Disco Duro | $1,200.00

Si pongo como me comentas en tu mensaje anterior, me trae la información de todos los select del formulario, por ello hice ese pequeño cambio.

Saludos!!
  #8 (permalink)  
Antiguo 24/03/2014, 17:39
Avatar de codeams  
Fecha de Ingreso: diciembre-2012
Ubicación: México
Mensajes: 103
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Error en variables jQuery

1) Yo metería un each() dentro de otro each()

Código Javascript:
Ver original
  1. $(".articulos").each(function(){
  2.     $(this).find('option:selected').each(function(){
  3.         console.log($(this).html())
  4.     })
  5. });

2) No será que ese "index" debe ser "i" XD

Código Javascript:
Ver original
  1. var i = 0;
  2. $(".articulos").each(
  3.     function(i, value) {
  4.         importes2[i] = $('.articulos option:selected').html();
  5.         alert(importes2[i]);
  6.     }
  7. );
__________________
¿Quién es codeams? codeams.ml
¿Qué hace en su tiempo libre? codepen.io/codeams

Última edición por codeams; 24/03/2014 a las 17:39 Razón: Typo
  #9 (permalink)  
Antiguo 24/03/2014, 17:49
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Error en variables jQuery

Viveee!! Viveeee!!! xDDD

Funcionó con el primer método que usaste, quedando así:

Código Javascript:
Ver original
  1. $(".articulos").each( function(){
  2.     $(this).find('option:selected').each(function() {
  3.         importes2[i] = $(this).html();
  4.     });
  5. });

aún se me complica hacer estás "cadenas" con las funciones de JQuery, te agradezco por la ayuda ^^

Saludos y muchas gracias!! :D
  #10 (permalink)  
Antiguo 24/03/2014, 18:19
Avatar de codeams  
Fecha de Ingreso: diciembre-2012
Ubicación: México
Mensajes: 103
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Error en variables jQuery

Por nada. No te vendría mal leerte el API de jQuery.
Cuando empecé con jQuery ni me imaginaba lo poderoso que podía llegar a ser.

Saludos y exito con tu proyecto.
__________________
¿Quién es codeams? codeams.ml
¿Qué hace en su tiempo libre? codepen.io/codeams

Etiquetas: variables
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 21:27.