Error en la multiplicacion de varias filas

Tengo un problema con el siguiente codigo. La funcion multiplica solo se ejecuta para la primera fila, pero a medida que ingreso nuevas filas no se ejecuta los mismo me sucede con el combo box que esta en la columna de tipo de gasto
Necesito que me ayuden con esto ya que me urge
<p>TABLA DE GASTOS </p>
<form id="form" name="form" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" onsubmit="asigna()">
<table width="397" border="1" cellspacing="1" bordercolor="#000000" id="tabla" align="center">
<tr colspan="13" align="left">
<td align="center"><font color="#000000" size="3"><b>AGREGAR O ELIMINAR</b></font></td>
<td align="center"><font color="#000000" size="3"><b>CODIGO MINA</b></font></td>
<td bgcolor="#FFFFFF">
<?php
echo"<select name=mina id=nombre_dado>";
$sql="SELECT Codigo_mina FROM minas";
$result=mysql_query($sql);
$i=0;
while ($row=mysql_fetch_row($result))
{
echo "<option value=".$row[$i].">".$row[$i]."</option>\n";
}
echo "</select>";
?>
</td>
</tr>
<tr align="center">
<td valign="top"><input type="button" name="b1" value="[+]" onClick="addRowX()">
<input type="button" name="b2" value="[-]" onClick="borrar()"></td>
<td>
<p><font color="#000000" size="1">FECHA</font></p>
<p><font color="#000000" size="1">(AAAA-MM-DD)</font></p>
</td>
<td><font color="#000000" size="1">DETALLE</font></td>
<td><font color="#000000" size="1">CANTIDAD</font></td>
<td><font color="#000000" size="1">VR UNITARIO</font></td>
<td><font color="#000000" size="1">IVA</font></td>
<td><font color="#000000" size="1">TOTAL</font></td>
<td><font color="#000000" size="1">TIPO DE GASTO</font></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"></td>
<td bgcolor="#FFFFFF"><input type="text" size="10"name="fecha_1"/></td>
<td bgcolor="#FFFFFF"><input type="text" size="25" name="deta_1" /></td>
<td bgcolor="#FFFFFF"><input type="text" size="4" name="cant_1" value="" /></td>
<td bgcolor="#FFFFFF"><input type="text" size="7" name="vunit_1" value="" onBlur="multiplica(this.form)"></td>
<td bgcolor="#FFFFFF"><input type="text" size="6" name="iva_1"/></td>
<td bgcolor="#FFFFFF"><input type="text" size="7" name="total_1" /></td>
<td bgcolor="#FFFFFF">
<?php
echo"<select name=tipg_1 id=nombre_dado>";
$sql="SELECT Tgasto FROM tipos_de_gastos";
$result=mysql_query($sql);
$i=0;
while ($row=mysql_fetch_row($result))
{
echo "<option value=".$row[$i].">".$row[$i]."</option>\n";
}
echo "</select>";
?>
</td>
<input type="hidden" name="var_cont" value="evento1">
</tr>
</table>
<p><br>
</p>
<table border="0" id="tabla_f2" bordercolor="#6B238E" align="center">
<tr>
<td><input type="submit" name="ok" id="ok" value="GUARDAR" /></td>
</tr>
</table>
</body>
</html>
<script language='JavaScript'>
//////////////multiplicar() ///////////
function multiplica(form){
var resultado;
var x=0;
var y=0;
x = parseInt (form.cant_1.value);
y = parseInt (form.vunit_1.value);
resultado = x * y;
form.total_1.value=resultado;
}
//////////////agregar fila() ///////////
var cont=1;
function addRowX() //Esta la funcion que agrega las filas :
{
cont++;
var indiceFila=1;
myNewRow = document.getElementById('tabla').insertRow(-1);
myNewRow.id=indiceFila;
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<td></td>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<td><input type="text" size="10" name="fecha_'+cont+'" /></td>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="25" name="deta_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="4" value="" name="cant_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="7" value="" onBlur="multiplica(this.form)" name="vunit_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="6" name="iva_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="7" value="" name="total_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="20" name="tipg_'+cont+'"/>';
indiceFila++;
}
//////////////Borrar() ///////////
function borrar() {
var table = document.getElementById('tabla');
if(table.rows.length > 3)
{
table.deleteRow(table.rows.length -1);
cont--;
}
}
////////////FUNCION ASIGNA VALOR DE CONT PARA EL FOR DE MOSTRAR DATOS MP-MOD-TT////////
function asigna()
{
valor=document.form.var_cont.value=cont;
}
</script>
1

1 Respuesta

109.425 pts. Mas de 15 años de experiencia en Java, Javascript y HTML
Solo te multiplica la primera fila porque en la función multiplica() tienes metido "a clavo" que multiplique los elementos "form.cant_1" y "form.vunit_1". Lo que tienes que hacer es pasar el índice como segundo parámetro a la función "multiplica()", de forma que quede de la siguiente forma:
//////////////multiplicar() ///////////
function multiplica(form, indice){
var resultado;
var x=0;
var y=0;

x = parseInt (form['cant_' + indice].value);
y = parseInt (form['vunit_' + indice].value);
resultado = x * y;
form['total_' + indice].value=resultado;
}

...Y no te olvides de meter el parámetro cuando crees la fila dinamicamente:
myNewCell.innerHTML='<input type="text" size="7" value="" onBlur="multiplica(this.form,' + cont + ')" name="vunit_'+cont+'"/>';
Espero que te sirva. Un saludo:
Carlos.
amigo muchisimas gracias me sirvio lo que me dijistes.  ahora lo unico que me falta es la parte del combobox que esta en la primera fila,  como hago para que tambien me aparezca en las demas filas.
Para arreglar lo del combo:
1) Crea una variable javascript para meter el código del combo. Este código puede ir en el head de la página:

<script>

var htmlcombo= '<select name=mina id=nombre_dado>';
<?php
    $sql="SELECT Codigo_mina FROM minas";
    $result=mysql_query($sql);
    $i=0;
    while ($row=mysql_fetch_row($result))
    {
      echo "htmlcombo+='<option value=".$row[$i].">".$row[$i]."</option>'";
    }

?>
htmlcombo += '</select>';
</script>

2) Donde tienes el código php para el primer combo: sustituyelo por

<script>document.write(htmlcombo)</script>

3) Cuando crees una nueva línea (dentro de la función addRowX()), usa de nuevo la variable htmlcombo para meter el código html del combo dentro de la celda:
myNewCell.innerHTML= htmlcombo;
Bueno, espero que te funcione. Salu2:
Carlos.
amigo he hecho lo que me dices sobre el combo pero no me funciona, aca te voy a adjuntar el codigo para que lo veas y me digas en que parte tengo el error.
<?php
include ("seguridad.php");
?> 
<?php
include("conex.phtml"); 
$link=Conectarse();
if(isset($_POST['ok'])){
for ($i=1;$i<=$_POST["var_cont"];$i++)
 {
echo "Numero de Fila: " ; echo $i;
echo "  Fecha: ";  echo $_POST["fecha_$i"];
echo "  Mina: "; echo $_POST["mina"];echo "<br>";
echo "  Detalle: "; echo $_POST["deta_$i"];
echo "  Cantidad: "; echo $_POST["cant_$i"];echo "<br>";
echo "  Vr Unitar: ";  echo $_POST["vunit_$i"];
echo "  Iva: "; echo $_POST["iva_$i"];
echo "  Total: "; echo $_POST["total_$i"];echo "<br>";
echo "  Tipo de gasto: "; echo $_POST["tipg_$i"];echo "<br>";
mysql_query("INSERT INTO gasto (Fecha, Codigo_mina, Tgasto, Detalle, Cantidad, Valor_Unitario, Iva, Total)
VALUES ('{$_POST["fecha_$i"]}','{$_POST["mina"]}','{$_POST["tipg_$i"]}','{$_POST["deta_$i"]}','{$_POST["cant_$i"]}','{$_POST["vunit_$i"]}','{$_POST["iva_$i"]}','{$_POST["total_$i"]}')",$link);
// Ahora comprobaremos que todo ha ido correctamente
$my_error = mysql_error($link);
if(!empty($my_error)) { 
echo "Ha habido un error al insertar los valores. $my_error"; 
} else {
echo "Los datos han sido introducidos satisfactoriamente";
}
}
}
?>
<html>
<head>
<title>MINA NUEVA MED & CIA LTDA </title>
<td><img src="cabezote.jpg" width="1019" height="180" /></td>
<script> 
var htmlcombo= '<select name=mina id=nombre_dado>'; 
<?php 
    $sql="SELECT Codigo_mina FROM minas"; 
    $result=mysql_query($sql); 
    $i=0; 
    while ($row=mysql_fetch_row($result)) 
    { 
      echo "htmlcombo+='<option value=".$row[$i].">".$row[$i]."</option>'"; 
    } 
?> 
htmlcombo += '</select>'; 
</script>
</head>
<body>
<p>TABLA DE GASTOS </p>
<form id="form" name="form" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" onsubmit="asigna()">
<table width="397" border="1" cellspacing="1" bordercolor="#000000" id="tabla" align="center">
<tr colspan="13" align="left">
<td align="center"><font color="#000000" size="3"><b>AGREGAR O ELIMINAR</b></font></td>
<td align="center"><font color="#000000" size="3"><b>CODIGO MINA</b></font></td>
<td bgcolor="#FFFFFF"> 
 <?php 
echo"<select name=mina id=nombre_dado>"; 
$sql="SELECT Codigo_mina FROM minas"; 
$result=mysql_query($sql); 
$i=0; 
while ($row=mysql_fetch_row($result)) 

echo "<option value=".$row[$i].">".$row[$i]."</option>\n"; 

echo "</select>"; 
?> 
 </td>
</tr>
<tr align="center">
<td valign="top"><input type="button" name="b1" value="[+]" onClick="addRowX()">
          <input type="button" name="b2" value="[-]" onClick="borrar()"></td>
<td>
<p><font color="#000000" size="1">FECHA</font></p>
<p><font color="#000000" size="1">(AAAA-MM-DD)</font></p>
</td>
<td><font color="#000000" size="1">DETALLE</font></td>
<td><font color="#000000" size="1">CANTIDAD</font></td>
<td><font color="#000000" size="1">VR UNITARIO</font></td>
<td><font color="#000000" size="1">IVA</font></td>
<td><font color="#000000" size="1">TOTAL</font></td>
<td><font color="#000000" size="1">TIPO DE GASTO</font></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"></td>
<td bgcolor="#FFFFFF"><input type="text" size="10"name="fecha_1"/></td>
<td bgcolor="#FFFFFF"><input type="text" size="25" name="deta_1" /></td>
<td bgcolor="#FFFFFF"><input type="text" size="4" name="cant_1" value="" /></td>
<td bgcolor="#FFFFFF"><input type="text" size="7" name="vunit_1" value="" onBlur="multiplica(this.form,'1')" </td>
<td bgcolor="#FFFFFF"><input type="text" size="6" name="iva_1"/></td>
<td bgcolor="#FFFFFF"><input type="text" size="7" name="total_1" /></td>
<td bgcolor="#FFFFFF">
<script>document.write(htmlcombo)</script>
</td>
<input type="hidden" name="var_cont" value="evento1">
</tr>
</table>
<p><br>
</p>
<table border="0" id="tabla_f2" bordercolor="#6B238E" align="center">
<tr>
<td><input type="submit" name="ok" id="ok" value="GUARDAR" /></td>
</tr>
</table>
</body>
</html>
<script language='JavaScript'>
//////////////multiplicar() ///////////
function multiplica(form, indice){ 
var resultado; 
var x=0; 
var y=0; 
x = parseInt (form['cant_' + indice].value); 
y = parseInt (form['vunit_' + indice].value); 
resultado = x * y; 
form['total_' + indice].value=resultado; 
}
//////////////agregar fila() ///////////
var cont=1;
function addRowX()  //Esta la funcion que agrega las filas :
{
cont++;
var indiceFila=1;
myNewRow = document.getElementById('tabla').insertRow(-1);
myNewRow.id=indiceFila;
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<td></td>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<td><input type="text" size="10" name="fecha_'+cont+'" /></td>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="25" name="deta_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="4" value="" name="cant_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="7" value="" onBlur="multiplica(this.form,' + cont + ')" name="vunit_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="6" name="iva_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML='<input type="text" size="7" value="" name="total_'+cont+'"/>';
myNewCell=myNewRow.insertCell(-1);
myNewCell.innerHTML= htmlcombo;
indiceFila++;
}
//////////////Borrar() ///////////
function borrar() {
var table = document.getElementById('tabla');
if(table.rows.length > 3)
    {
    table.deleteRow(table.rows.length -1);
cont--;
    }
}
////////////FUNCION ASIGNA VALOR DE CONT PARA EL FOR DE MOSTRAR DATOS MP-MOD-TT////////
function asigna()
{
valor=document.form.var_cont.value=cont;
}
</script>
<?phpinclude ("seguridad.php");?> <?phpinclude("conex.phtml"); $link=Conectarse();
if(isset($_POST['ok'])){
for ($i=1;$i<=$_POST["var_cont"];$i++) {
echo "Numero de Fila: " ; echo $i;echo "  Fecha: ";  echo $_POST["fecha_$i"];echo "  Mina: "; echo $_POST["mina"];echo "<br>";echo "  Detalle: "; echo $_POST["deta_$i"];echo "  Cantidad: "; echo $_POST["cant_$i"];echo "<br>";echo "  Vr Unitar: ";  echo $_POST["vunit_$i"];echo "  Iva: "; echo $_POST["iva_$i"];echo "  Total: "; echo $_POST["total_$i"];echo "<br>";echo "  Tipo de gasto: "; echo $_POST["tipg_$i"];echo "<br>";
mysql_query("INSERT INTO gasto (Fecha, Codigo_mina, Tgasto, Detalle, Cantidad, Valor_Unitario, Iva, Total)
VALUES ('{$_POST["fecha_$i"]}','{$_POST["mina"]}','{$_POST["tipg_$i"]}','{$_POST["deta_$i"]}','{$_POST["cant_$i"]}','{$_POST["vunit_$i"]}','{$_POST["iva_$i"]}','{$_POST["total_$i"]}')",$link);
// Ahora comprobaremos que todo ha ido correctamente
$my_error = mysql_error($link);
if(!empty($my_error)) { 
echo "Ha habido un error al insertar los valores. $my_error"; 
} else {echo "Los datos han sido introducidos satisfactoriamente";}}}?>
<html>
<head>
<title>MINA NUEVA MED & CIA LTDA </title>
<td><img src="cabezote.jpg" width="1019" height="180" /></td>
</head>
<body>
<p>TABLA DE GASTOS </p>
<form id="form" name="form" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" onsubmit="asigna()">
<table width="397" border="1" cellspacing="1" bordercolor="#000000" id="tabla" align="center">
<tr colspan="13" align="left">
<td align="center"><font color="#000000" size="3"><b>AGREGAR O ELIMINAR</b></font></td>
<td align="center"><font color="#000000" size="3"><b>CODIGO MINA</b></font></td>
<td bgcolor="#FFFFFF">   <?php echo"<select name=mina id=nombre_dado>"; 
$sql="SELECT Codigo_mina FROM minas"; $result=mysql_query($sql); $i=0; while ($row=mysql_fetch_row($result)) { echo "<option value=".$row[$i].">".$row[$i]."</option>\n"; } echo "</select>"; ?>     </td>
</tr>
<tr align="center">
<td valign="top"><input type="button" name="b1" value="[+]" onClick="addRowX()">          <input type="button" name="b2" value="[-]" onClick="borrar()"></td>
<td>
<p><font color="#000000" size="1">FECHA</font></p>
<p><font color="#000000" size="1">(AAAA-MM-DD)</font></p>
</td>
<td><font color="#000000" size="1">DETALLE</font></td>
<td><font color="#000000" size="1">CANTIDAD</font></td>
<td><font color="#000000" size="1">VR UNITARIO</font></td>
<td><font color="#000000" size="1">IVA</font></td>
<td><font color="#000000" size="1">TOTAL</font></td>
<td><font color="#000000" size="1">TIPO DE GASTO</font></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"></td>
<td bgcolor="#FFFFFF"><input type="text" size="10"name="fecha_1"/></td>
<td bgcolor="#FFFFFF"><input type="text" size="25" name="deta_1" /></td>
<td bgcolor="#FFFFFF"><input type="text" size="4" name="cant_1" value="" /></td>
<td bgcolor="#FFFFFF"><input type="text" size="7" name="vunit_1" value="" onBlur="multiplica(this.form,'1')" </td>
<td bgcolor="#FFFFFF"><input type="text" size="6" name="iva_1"/></td>
<td bgcolor="#FFFFFF"><input type="text" size="7" name="total_1" /></td>
<td bgcolor="#FFFFFF">
<script>document.write(htmlcombo)</script>
</td>
<input type="hidden" name="var_cont" value="evento1">    
</tr>
</table>
<p><br></p>
<table border="0" id="tabla_f2" bordercolor="#6B238E" align="center">
<tr>
<td><input type="submit" name="ok" id="ok" value="GUARDAR" /></td>
</tr>
</table>
</body>
</html>
<script> 
var htmlcombo= '<select name=mina id=nombre_dado>'; <?php     $sql="SELECT Codigo_mina FROM minas";     $result=mysql_query($sql);     $i=0;     while ($row=mysql_fetch_row($result))     {       echo "htmlcombo+='<option value=".$row[$i].">".$row[$i]."</option>'";     } ?> htmlcombo += '</select>'; </script>
<script language='JavaScript'>//////////////multiplicar() ///////////function multiplica(form, indice){ var resultado; var x=0; var y=0; x = parseInt (form['cant_' + indice].value); y = parseInt (form['vunit_' + indice].value); resultado = x * y; form['total_' + indice].value=resultado; }
//////////////agregar fila() ///////////
var cont=1;function addRowX()  //Esta la funcion que agrega las filas :{
cont++;var indiceFila=1;myNewRow = document.getElementById('tabla').insertRow(-1);myNewRow.id=indiceFila;myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML='<td></td>';myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML='<td><input type="text" size="10" name="fecha_'+cont+'" /></td>';myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML='<input type="text" size="25" name="deta_'+cont+'"/>';myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML='<input type="text" size="4" value="" name="cant_'+cont+'"/>';myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML='<input type="text" size="7" value="" onBlur="multiplica(this.form,' + cont + ')" name="vunit_'+cont+'"/>';myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML='<input type="text" size="6" name="iva_'+cont+'"/>';myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML='<input type="text" size="7" value="" name="total_'+cont+'"/>';myNewCell=myNewRow.insertCell(-1);myNewCell.innerHTML= htmlcombo;myNewCell.innerHTML='<input type="text" size="20" name="tipg_'+cont+'"/>';
indiceFila++;
}//////////////Borrar() ///////////function borrar() {var table = document.getElementById('tabla');if(table.rows.length > 3)    {    table.deleteRow(table.rows.length -1);cont--;    }}
////////////FUNCION ASIGNA VALOR DE CONT PARA EL FOR DE MOSTRAR DATOS MP-MOD-TT////////function asigna(){valor=document.form.var_cont.value=cont;}</script>
Veo que tienes repetido el código de relleno del combo (var htmlcombo=...). Ese código solo es necesario ejecutarlo una vez, dentro del head (Por cierto, tienes un td en el head que no tiene que estar ahí).
Siento no poder ayudarte mucho mas, pero es que estoy full de trabajo y además yo no tengo servidor de php (soy de Java). Intenta hacer que funcione por tí mismo, vas bien encaminado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas