Función multiplicar con valor de array

Tengo la siguiente funcion que multiplica x valores
function presta1()
{
valor3=parseFloat(document.getElementById('val3').value);
valor4=parseFloat(document.getElementById('precio').value);
document.getElementById('val4').value= valor3 * valor4 ;
 }
la funcion esta bien, el problema que tengo es que precio lo saco de un array
<script> 
function componer_Centros(cod_area) 

//alert(cod_area); 
document.miformulario.nombre.length=0;
document.miformulario.unidad.length=0;  
document.miformulario.precio.length=0;  
document.miformulario.nombre.options[0] = new Option("-- Seleccione --","","defaultSelected","");
document.miformulario.unidad.options[0] = new Option("-- Seleccione --","","defaultSelected",""); 
document.miformulario.precio.options[0] = new Option("-- Seleccione --","","defaultSelected",""); 
var indice=1; 
<? 
$sql_depto = "SELECT * from nom1 inner join un1 on nom1.id=un1.id inner join prec1 on un1.id=prec1.id"; 
$rs_depto = mysql_query($sql_depto, $con); 
if(mysql_num_rows($rs_depto)>0) 

while($row_depto = mysql_fetch_assoc($rs_depto)) 

?> 
if(cod_area=='<?=$row_depto["id"]?>') 

document.miformulario.nombre.options[indice] = new Option("<?=$row_depto["nombre"]?>","<?=$row_depto["id"]?>"); 
document.miformulario.unidad.options[indice] = new Option("<?=$row_depto["unidad"]?>","<?=$row_depto["id"]?>"); 
document.miformulario.precio.options[indice] = new Option("<?=$row_depto["precio"]?>","<?=$row_depto["id"]?>"); 
indice++; 

<? 


mysql_close($con); 
?> 

</script>
Que debo hacer para que en la función de presta1() me tome el valor de precio que jalo del arrray
Saludos y Gracias
resto del codigo
<? 
$bd_host = "localhost"; 
$bd_usuario = "root"; 
$bd_password = "yoyoyo"; 
$bd_base = "a+i"; 
$con = mysql_connect($bd_host, $bd_usuario, $bd_password); 
mysql_select_db($bd_base, $con); 
$sql = "SELECT * from mat1"; 
$rs = mysql_query($sql, $con); 
?> 
<select name="clave" id="clave" onChange="componer_Centros(this.value);"> 
<option value="">--Seleccione--</option> 
<? if(mysql_num_rows($rs)>0) 

while($row = mysql_fetch_assoc($rs)) 

?> 
<option value="<?=$row["id"]?>"><?=$row["clave"]?></option> 
<? 


?> 
</select>
<select name="nombre" id="nombre">
<option>--seleccione--</option> 
</select>
<select name="unidad" id="unidad"> 
<option>--seleccione--</option> 
</select>
<select name="precio" id="precio"> 
<option>--seleccione--</option> 
</select>
</td>
<td>
Val 2:<input type="text" name="val2" id="val2"/>
</td>
<td>
Val 3:<input type="text" name="val3"  id="val3"/>
<input type="button" value="=" onClick="presta()">
</td>
<td>
Val 4:<input type="text" name="val4"  id="val4"/>
<input type="button" value="=" onClick="presta1()">
</td>
<td> Que debo hacer para que en la funcion de presta1() me tome el valor de precio que jalo del arrray
1

1 respuesta

Respuesta
1
Da igual de dónde saques los valores que metes en los select (como si metes los options a pelo). Lo que te interesa es que cuando se pulse el botón que ejecuta "presta1()" se multipliquen los valores que hay seleccionados en ese momento en los select. Si el select "precio" tiene algo seleccionado, y el input "val4" también, tu código debería funcionar. Eso sí: dentro de "presta1()" deberás comprobar antes que los valores que vas a multiplicar son números. Esto lo puedes hacer una vez que has hecho el parseFloat, usando la función isNaN pasando como parámetro el resultado del parseFloat().
Si tienes más dudas seguimos.
oK muchas gracias caballero el campo precio es de tipo decimal (6,2) y val3 no esta definido ya que este campo no lo saco de una base de datos como en el caso de precio seria de esta forma para poner isNaN
valor1=parseFloat(document.getElementById(isNaN('val1').value));
  valor2=parseFloat(document.getElementById(isNaN('val2').value));
Se me paso decirle que si me multiplica el valor que tengo en val3 * precio pero el ultimo mencionad0 lo toma con valor 1 siendo que el valor que tengo seleccionado en el combo es 160.00
Saludos y Gracias
Te pongo un ejemplo de cómo se usa la función isNaN():
valor1=parseFloat(document.getElementById('val1').value);
if (isNaN(valor1)){
alert("Inserte un valor correcto para val1");
return false;
}
El valor del select lo coge mal porque lo estás rellenando mal con los valores de la base de datos. La forma correcta sería:
while($row = mysql_fetch_assoc($rs))  
{  
?>  
<option value="<?=$row["
clave"]?>"><?=$row["clave"]?></option>  
<?  
}
oK perfecto lo que pasa que id es el campo mediante el cual relaciono las tablas si le pongo clave no me relaciona los combos dependientes que en este caso son 3, realize lo de isNaN no mando mensaje de error al capturar los campos ni cuando se realiza los cálculos me sigue tomando precio con valor 1
Saludos y Gracias
Atentamente
Jorge Sánchez
Ok. Deja el id como estaba. A la hora de recuperar el precio haz:
var selectPrecio = document.getElementById('precio');
valor4=parseFloat(selectPrecio.options[selectPrecio.selectedIndex].text);
¿Perfecto amigo muchas gracias ya funciono entonces en estos casos se debe declarar otra variable en la cual se especifique que el valor sera tomado de un select indexado?
Saludos y Gracias
Atentamente Jorge Sánchez
No entiendo tu última pregunta, lo siento.
Ok bueno disculpe amigo si no fui claro en la pregunto, me refiero a este ultimo código que realizo
en donde declaro una variable con nombre selectPrecio y la igualo al precio
para después asignarle a valor 4 el option value del index y así pudiera calcular el precio* val3
Es decir que así como yo tenia mi código nunca me iba a reconocer el valor de precio
//
var selectPrecio = document.getElementById('precio');
valor4=parseFloat(selectPrecio.options[selectPrecio.selectedIndex].text);
Saludos y Gracias
:)
Lo de declarar una variable nueva es por hacer el código más legible. También se podría implementar así, pero queda como decimos en España, "un chorizo":
valor4=parseFloat(document.getElementById('precio').options[document.getElementById('precio').selectedIndex].text);
Como más te guste.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas