Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/05/2009, 09:58
Avatar de educlon
educlon
 
Fecha de Ingreso: octubre-2003
Ubicación: Buenos Aires
Mensajes: 35
Antigüedad: 21 años, 4 meses
Puntos: 0
Exclamación onChange en filas dinámicas no funciona

Bueno, acudo a ustedes a ver si me pueden dar una mano, ya que estoy trabado y no veo el error.

Tengo un formulario con una fila de controles. Cada fila está compuesta por 1 select y dos inputs.

Cuando pulso el botón "Agregar Producto" se van agregando filas dinámicamente, y en cada fila aparecen los 3 controles que me permiten seleccionar un producto, ingresar la cantidad y el precio.

El select se llena con los productos desde una BD. Necesito que al seleccionar un producto, se ejecute onChange y me muestre el precio en el tercer input. Estuve tratando pero el código no me funciona.

El javascript que utilizo es este:


Código Javascript:
Ver original
  1. var indiceFilaForm=1;
  2. function agregarProducto()
  3. {
  4.     myNewRow = document.getElementById("tablaProducto").insertRow(-1);
  5.     myNewRow.id=indiceFilaForm;
  6.     myNewCell=myNewRow.insertCell(-1);
  7.     myNewCell.innerHTML="<select name='vid_producto["+indiceFilaForm+"]' onchange='cambia_precio("+indiceFilaForm+")' >{/literal}{$marprod_list}{literal}</select>";
  8.     myNewCell=myNewRow.insertCell(-1);
  9.     myNewCell.innerHTML="Cant.<input type=text name='vcantidad["+indiceFilaForm+"]' size='3' value='1' style='text-align:center;' />";
  10.     myNewCell=myNewRow.insertCell(-1);
  11.     myNewCell.innerHTML="u$s<input type=text name='vprecio["+indiceFilaForm+"]' id='vprecio' size='6' style='text-align:right;' />";
  12.     myNewCell=myNewRow.insertCell(-1);
  13.     myNewCell.innerHTML="<input type='button'  value='Quitar' onclick='quitarProducto(this)'>";
  14.     myNewCell=myNewRow.insertCell(-1);
  15.     myNewCell.innerHTML="";
  16.     myNewCell=myNewRow.insertCell(-1);
  17.     myNewCell.innerHTML="";
  18.     indiceFilaForm++;
  19. }
  20.  
  21. function quitarProducto(obj)
  22. {
  23.     var oTr = obj;
  24.     while(oTr.nodeName.toLowerCase()!='tr')
  25.     {
  26.         oTr=oTr.parentNode;
  27.     }
  28.     var root = oTr.parentNode;
  29.     root.removeChild(oTr);
  30. }
  31.  
  32. // Precios de los productos
  33. var precio_1 = "45.00";
  34. var precio_2 = "90.00";
  35. var precio_3 = "75.00";
  36. var precio_5 = "220.00";
  37. ...
  38. var precio_35 = "200.00";
  39.  
  40. function cambia_precio(indice)
  41. {
  42.     var id_producto;
  43.     id_producto = document.f1.vid_producto[indice][document.f1.vid_producto[indice].selectedIndex].value;
  44.     if (id_producto != "")
  45.     {
  46.         mi_precio = eval("precio_" + id_producto);
  47.         document.f1.vprecio[indice].value = mi_precio;
  48.         document.f1.vprecio[indice].text = mi_precio;
  49.     }
  50.     else
  51.     {
  52.         document.f1.vprecio[indice].value = "";
  53.         document.f1.vprecio[indice].text = "";
  54.     }
  55. }

Los var precio_1 a precio_35 se arman desde PHP.
Los
Código:
{literal}{/literal}
aparecen porque utilizo SMARTY, y el el javascript me imprimen los option del select con los productos, eso esta andando bien.

En definitiva, las filas se agregan bien, y los controles quedan bien indexados, pero no logro hacer que aparezca el precio dentro del tercer input.

Si alguien me puede decir donde está el error, se lo voy a agradecer, ya que yo no lo puedo ver aun.

Desde ya mil gracias...

Eduardo

Última edición por educlon; 19/05/2009 a las 11:07