Foros del Web » Programando para Internet » Javascript »

Evento onChange dentro de codigo Javascript

Estas en el tema de Evento onChange dentro de codigo Javascript en el foro de Javascript en Foros del Web. Hola Todos/as Tengo un problema con un codigo de una pagina, y no hay manera de conseguir que esto ande, os explico es una tabla ...
  #1 (permalink)  
Antiguo 09/09/2010, 06:34
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Evento onChange dentro de codigo Javascript

Hola Todos/as

Tengo un problema con un codigo de una pagina, y no hay manera de conseguir que esto ande, os explico es una tabla que cuando das a un boton genera una fila nueva, o bien puedes borrar una fila.

Hasta hay cero problemas funciona, pero tengo un problema dentro de uno de los selects se cargan con Php dinamicamente unos datos de mysql, esto tambien lo hace bien pero este campo envia con JavaScript a un input a traves de la funcion muestraPrecioProducto(), por lo que tengo que añadir en el select el evento onChange pero no me lo pone en el nuevo select que creo se me queda así:

<td><select name="nombre_producto1" id="nombre_producto1"></td>

Falta el
Código:
onChange="muestraPrecioProducto()"
Creo que es por eso que no funciona

Os pongo el codigo

Código:
  
  var celdaComboNombreProducto = row.insertCell(0);
  var sel = document.createElement('select');
  sel.name = 'nombre_producto' + iteration;
  sel.id = 'id_nombre_producto' + iteration;

// Dalo mismo sel.onchange que onChange
  sel.onChange = 'muestraPrecioProducto()';


  sel.options[0] = new Option('Seleccion', '0');
   
  // Comentado por que lo cargariamos con un bucle while desde BBDD
  <?Php
$sqltarifa=mysql_query("select * from productos");
while ($ftarifa=mysql_fetch_array($sqltarifa)){
print "sel.options['".$ftarifa[0]."']= new Option ('".$ftarifa[3]."','".$ftarifa[7]."');";
}
mysql_free_result($sqltarifa);
?>
  sel.onChange = 'muestraPrecioProducto()';
  celdaComboNombreProducto.appendChild(sel);

Haber si alguien lo ha hecho o me puede decir como se debe poner o hacer para que parezca y ejecute el evento onChange.

Saludos y mil gracias
  #2 (permalink)  
Antiguo 09/09/2010, 07:09
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Evento onChange dentro de codigo Javascript

Hola

Prueba así
Cita:
sel.onChange = function(){muestraPrecioProducto();}
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 09/09/2010, 07:21
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Hola Adler

Eso ya lo probe y sigue sin funcionar ese select no hace caso del onChange.

He mirado el codigo fuente de la pagina web y sigue apareciendo asi:

<td><select name="nombre_producto2" id="nombre_producto2"></td>, y no como deberia aperecer.

Me tiene loco esto no hay manera.

Haber si alguien lo ha hecho de alguna otra manera.

Saludos
  #4 (permalink)  
Antiguo 09/09/2010, 07:27
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Evento onChange dentro de codigo Javascript

en javascript, todos los eventos se escriben en minuscula. fijate que tienes una letra en mayuscula.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 09/09/2010, 07:30
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Hola ZeroKilled

Lo he puesto asi:

sel.onChange = function(){muestraPrecioProducto();}

Y asi tambien

sel.onchange = function(){muestraPrecioProducto();}

Y no hay manera de que funcione.



Saludos
Mil gracias
  #6 (permalink)  
Antiguo 09/09/2010, 07:35
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Evento onChange dentro de codigo Javascript

Hola
Cita:
sel.onchange = function(){muestraPrecioProducto(this.value);}
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #7 (permalink)  
Antiguo 09/09/2010, 07:55
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Bueno os pongo todo el codigo para que lo veais, haber si veis algo que yo no veo o alguna otra manera de hacer, lo mismo y mas facil:

¿Que tiene que hacer el formulario?

El formulario tiene 4 celdas por fila,

1ª celda descripción del producto - select nombre producto
2ª celda precio unitario del producto seleccionado - input dependiente de 1ª
3ª celda unidades de cada producto - select unidades
4ª celda total (preciounitario*unidades) - input con el total unidades por precio

Entonces operamos de la siguiente manera, en la 1ª seleccionamos el producto, de hay nos imprime en 2ª el precio unitario, luego seleccionamos las unidades 3ª y en 4ª no calcula el total.

Para hacer esto utilizamos una tabla dinamica hecha con javaScript y acceso a mysql para cargar los productos y sus precios.

Al cambiar de producto con el select 1ª el input 2ª se actualiza, para ello utilizamos el evento onChange, dentro del select, asi llamamos a una funcion javaScript muestraPrecioProductos().

El problema es que al generar la segunda fila de la tabla no incluye el evento onChange por lo tanto no funciona.


Os pongo el codigo JavaScript, completo:

Código:
  <script type="text/javascript">

function addRowToTable()
{
  var tbl = document.getElementById('tabla');
  var lastRow = tbl.rows.length;
  // if there's no header row in the table, then iteration = lastRow + 1
  var iteration = lastRow;
  var row = tbl.insertRow(lastRow);
  
  // Sabemos el numero a insertar
  //alert (lastRow);
  
  // left cell
 /* var cellLeft = row.insertCell(0);
  var textNode = document.createTextNode(iteration);
  cellLeft.appendChild(textNode);*/
  
  
  
  // Combo nombre producto
  var celdaComboNombreProducto = row.insertCell(0);
  var sel = document.createElement('select');
//  sel.onchange= muestraPrecioProducto('sel.id');
  
  sel.name = 'nombre_producto' + iteration;
  sel.id = 'id_nombre_producto' + iteration;
  sel.options[0] = new Option('Seleccion', '0');
   
  // Aqui cargamos los productos en el select 
  <?Php
$sqltarifa=mysql_query("select * from productos");
while ($ftarifa=mysql_fetch_array($sqltarifa)){
print "sel.options['".$ftarifa[0]."']= new Option ('".$ftarifa[3]."','".$ftarifa[7]."');";
}
mysql_free_result($sqltarifa);
?>

//Aqui esta el problema
+++++++++++++++++++++++++++++++++++++++++++
  sel.onChange = function(){muestraPrecioProducto();}
+++++++++++++++++++++++++++++++++++++++++++
  
  celdaComboNombreProducto.appendChild(sel);

// precio producto
  var celdaPrecioProducto = row.insertCell(1);
  var el = document.createElement('input');
  el.type = 'text';
  el.name = 'precio_producto' + iteration;
  el.id = 'id_precio_producto' + iteration;
  el.size = 8;
  

  celdaPrecioProducto.appendChild(el);
  
  // unidades de producto
  var comboUnidadProducto = row.insertCell(2);
  var sel = document.createElement('select');
  sel.name = 'unidades_producto' + iteration;
  sel.options[0] = new Option('Cantidad', '0');
  sel.options[1] = new Option('1', '1');
  sel.options[2] = new Option('2', '2');
  comboUnidadProducto.appendChild(sel);
  
  // Total producto
  var celdaTotalProducto = row.insertCell(3);
  var el = document.createElement('input');
  el.type = 'text';
  el.name = 'total_producto' + iteration;
  el.id = 'id_total_producto' + iteration;
  el.size = 8;
  
   
  celdaTotalProducto.appendChild(el);
}


function removeRowFromTable()
{
  var tbl = document.getElementById('tblSample');
  var lastRow = tbl.rows.length;
  if (lastRow > 2) tbl.deleteRow(lastRow - 1);
}

function muestraPrecioProducto() {
	var indice = document.frm1.nombre_producto1.selectedIndex
	var valor = document.frm1.nombre_producto1.options[indice].value
		document.getElementById('id_precio_producto1').value = valor;
			}

</script>
Aqui el HTML

Código HTML:
<table border="1" id="tabla">
  <tr>
   <th colspan="3">Tabla Ejemplo</th>
  </tr>
  <tr>


    <td><?
$sqltarifa=mysql_query("select * from productos");

echo '<select name="nombre_producto1" id="nombre_producto1" onChange="muestraPrecioProducto()">';
echo '<option value="0">Seleccione </option>';
while ($ftarifa=mysql_fetch_array($sqltarifa)){
echo '<option value="' . $ftarifa[7] . '" >' . $ftarifa[3] . '</option>';
}
echo '</select>';

mysql_free_result($sqltarifa);
?>
    </td>
	    <td><input type="text" name="precio_producto1" id="id_precio_producto1" size="8"></td>
	    <td>
    <select name="unidades_producto1" id"id_unidades_producto1" onchange="calcula_total()">
          <option value="0" selected>Cantidad</option>
          <option value="1">1</option>
          <option value="2">2</option>

    </select>
    </td> 
	    <td><input type="text" name="total_producto1" id="id_total_producto1" size="8" ></td>
  </tr>
</table>
</form> 
Haber si alguien ve el por que de no funcionar el onChange.


Saludos y gracias a todos.
  #8 (permalink)  
Antiguo 09/09/2010, 08:00
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Hola Adler

También lo he probado asi y no hay manera, por eso he puesto todo el codigo, haber si es que hay algo en alguna posicion que no debe ir alli.

Muchas gracias.

Haber si doy con esto ya que me tiene harto.

Saludos
  #9 (permalink)  
Antiguo 09/09/2010, 08:19
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Evento onChange dentro de codigo Javascript

Hola

Tienes la línea comentada
Cita:
// sel.onchange= muestraPrecioProducto('sel.id');
Cambia sel por this

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #10 (permalink)  
Antiguo 09/09/2010, 08:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Adler

Sigue igual descomentada la linea y puesta como tu me has dicho y sigue sin funcionar, cambie sel. por this y nada de nada.

Lo he puesto asi

sel.onchange = function(){muestraPrecioProducto(this.id);}


Gracias

Haber si alguien ve algo mas.

Saludos

Última edición por marco_sa; 09/09/2010 a las 08:35
  #11 (permalink)  
Antiguo 09/09/2010, 12:58
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Evento onChange dentro de codigo Javascript

Hola

Veamos, a la función muestraPrecioProducto() le estás pasando un parámetro pero no lo estás recogiendo. Prueba así
Cita:
sel.onchange = function(){muestraPrecioProducto(this.value);}

function muestraPrecioProducto(valor) {
document.getElementById('id_precio_producto1').val ue = valor;
}
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #12 (permalink)  
Antiguo 09/09/2010, 15:54
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Hola Adler

Efectivamente funciona asi, no obstante hay algo que no funciona como es debido, te explico haber si me das una idea:

Actualmente lo tengo asi:

Con este código aumentamos una linea con su select , y sus name e id_ diferentes que van cambiando segun crece o decrece la tabla

Código:
      function addRowToTable()
   {
  var tbl = document.getElementById('tabla');
  var lastRow = tbl.rows.length;
  // if there's no header row in the table, then iteration = lastRow + 1
  var iteration = lastRow;
  var row = tbl.insertRow(lastRow);


  // Combo nombre producto
  var celdaComboNombreProducto = row.insertCell(0);
  var sel = document.createElement('select');
  sel.name = 'nombre_producto' + iteration;
  sel.id = 'id_nombre_producto' + iteration;
  sel.options[0] = new Option('Seleccion', '0');
   
  // Comentado por que lo cargariamos con un bucle while desde BBDD
  <?Php
$sqltarifa=mysql_query("select * from productos");
while ($ftarifa=mysql_fetch_array($sqltarifa)){
print "sel.options['".$ftarifa[0]."']= new Option ('".$ftarifa[3]."','".$ftarifa[7]."');";
}
mysql_free_result($sqltarifa);
?>
   sel.onchange = function(){muestraPrecioProducto(this.value);}

  celdaComboNombreProducto.appendChild(sel);
}

// input precio producto
  var celdaPrecioProducto = row.insertCell(1);
  var el = document.createElement('input');
  el.type = 'text';
  el.name = 'precio_producto' + iteration;
  el.id = 'id_precio_producto' + iteration;
  el.size = 8;
  
  el.onkeypress = keyPressTest;
  celdaPrecioProducto.appendChild(el);
Este codigo es el de la funcion:
Código:
function muestraPrecioProducto(valor) {
document.getElementById('id_precio_producto2').value = valor;
}
Segun esta ahora y ya si que estoy bloqueado del todo, cuando generamos una nueva fila, con sus celdas de select y su input, la tercera flia generada me actualiza el input de la 2.

Osea me imprime lo seleccionado en el combo de la fila tercera en el input de la segunda, se por que es, y es por que la función muestraPrecioProducto, trae el valor de id_precio_producto2.

Mi pregunta es como generar esa misma funciçon para que cada vez que se añada una fila esta sepa desde donde la llamamos, y asi imprima en el input que le corresponde.

Ejemplo se selecciona un producto en el combo4 e imprima el valor de id_precio_producto4 en su input.

Creo que mas o menos lo he explicado, esto no se como hacerlo la logica ya con este embrollo la he perdido, haber que se te ocurre ati hacer con esa funcion para que sepa desde que selec se la llama y en que input lo debe mostrar.

Mil gracias por la ayuda.

SAludos
  #13 (permalink)  
Antiguo 09/09/2010, 16:09
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: Evento onChange dentro de codigo Javascript

Hola

Bueno, se trata de jugar un poco con las id. La id del select id_nombre_producto' + iteration, si la cambiamos a id_producto' + iteration y la del textfield la cambiamos a id_producto' + iteration +_precio, ya hemos resuelto el problema. Ahora quedaría así
Cita:
sel.onchange = function(){muestraPrecioProducto(this.value, this.id);}

function muestraPrecioProducto(valor, id) {
document.getElementById(id+ '_precio').value = valor;
}
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #14 (permalink)  
Antiguo 10/09/2010, 03:53
 
Fecha de Ingreso: diciembre-2007
Mensajes: 113
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Hola Adler

Mil gracias Funncionaaaaaaaaaaaaaaaaaaaaaa.

Increible.

Saludos
  #15 (permalink)  
Antiguo 29/09/2014, 10:20
 
Fecha de Ingreso: septiembre-2014
Ubicación: Estado de México
Mensajes: 6
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Evento onChange dentro de codigo Javascript

Hola. qué tal
Estoy desarrollando una tabla en la cual tengo un combo con un evento onchange en php y trato de hacerla dinámica con javascript, utilizo el código que han publicado en este post. El problema es que aún no logro hacerlo funcionar y debido a esto he decido solicitar su valiosa ayuda, de antemano les agradezco.

Código PHP:
<HTML>
<HEAD>
<script type="text/javascript" src="livevalidation_standalone.js"></script>
    <TITLE> <- OTRO -> </TITLE>
<script language="javascript">
function addRowToTable()
   {
  var tbl = document.getElementById('tabla');
  var lastRow = tbl.rows.length;
  // if there's no header row in the table, then iteration = lastRow + 1
  var iteration = lastRow;
  var row = tbl.insertRow(lastRow);

  // Combo nombre producto
  var celdaComboNombreProducto = row.insertCell(0);
  var sel = document.createElement('select');
  sel.name = 'nombre_producto'+ iteration;
  sel.id = 'id_nombre_producto'+ iteration;
  sel.options[0] = new Option('Seleccionar Material', '0');
   
  // Comentado por que lo cargariamos con un bucle while desde BBDD
  <?php            include('conecta.php');
$sqltarifa=mysql_query("select * from Material");
while (
$ftarifa=mysql_fetch_array($sqltarifa)){
echo 
"sel.options['$ftarifa[0]']= new Option ('$ftarifa[1]','$ftarifa[3]');";
}
mysql_free_result($sqltarifa);
?>
   <!--sel.onchange = function(){muestraPrecioProducto(this.value);}
   sel.onchange = function(){muestraPrecioProducto(this.value, this.id);}
   
        function muestraPrecioProducto(valor, id) {
        document.getElementById(id+ '_precio').value = valor;
        }
        
  celdaComboNombreProducto.appendChild(sel);

// input precio producto
  var celdaPrecioProducto = row.insertCell(1);
  var el = document.createElement('input');
  <!-- el.setAttribute("id", "uniqueIdentifier");
   el.type = 'text';
   el.id = 'id_precio_producto'+ iteration;
   el.name = 'precio_producto'+ iteration;
   el.size = 4;
                        alert (iteration);
  <!--el.onkeypress = keyPressTest;
  celdaPrecioProducto.appendChild(el);
}
  </script>
  <table id="tabla">
  <form>
  <tr>
   <th colspan="7">Tabla Ejemplo</th>
  </tr>
 <?php
$sqlu
="SELECT materialr3, descripcionmat, existencia, unidad from Material INNER JOIN Unidadmedida
            ON umed=idum order by descripcionmat asc"
;
$respu=mysql_query($sqlu) or die ("Error al selccionar Unidad de Medida 1 ".mysql_error());
            
$dr=rand(); echo "\n $dr";
?>        <INPUT type="button" value="Add Row" onclick="addRowToTable(tabla)" />
        <TR>
            <TD>
                <select name="materialu" id="selecprod" onchange="r3d<?php echo "$dr"?>.value=this.options[this.selectedIndex].getAttribute('r3');
                                                 umedd<?php echo "$dr"?>.value=this.options[this.selectedIndex].getAttribute('medida');
                                                 exisd<?php echo "$dr"?>.value=this.options[this.selectedIndex].getAttribute('exis');"/>
                <option value="$row['materialr3']">Seleccionar Material</option>
                <?php
                
while ($row mysql_fetch_assoc($respu)){          //while($row=mysql_fetch_row($respM))
                
?>
                <option value='$row['descripcionmat'] r3="<?php echo $row['materialr3'?> 
                "medida="<?php echo $row['unidad'?>"exis="<?php echo $row['existencia'?>"> <?php echo $row['descripcionmat'?> </option>
                <?php
                
}
                
?>
                </select>
            </TD>
                <td><input type='text' name='r3[]'  id='r3d<?php echo "$dr"?>' value='' size='4' maxlength='20'  readonly></td>
                <td><input type='text' name='exis[]'  id='exisd<?php echo "$dr"?>' value='' size='5' maxlength='10'  readonly></td>
                            <script>
                            var ex =document.getElementById("exisd").value;
                            var existencia = Math.abs(ex);
                            </script>
                <td><input type='text' name='medida[]'  id='umedd<?php echo "$dr"?>' value='' size='6' maxlength='10' readonly></td>
                <td><input type='text' name='despachar[]' size='6' id='desc<?php echo "$dr"?>'></td>
                            <script type="text/javascript">  
                            var d2 = new LiveValidation('desc');
                            d2.add(Validate.Presence);
                            d2.add( Validate.Numericality, { minimum: 1, onlyInteger: true } );</script>
                <td><input type='text' name='destino[]' maxlength='21'></td>
                <td><input type='text' name='obs[]' size='10'></td></tr>
</table>
</form> 
</html>

Etiquetas: onchange, eventos
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 23:56.