Cita:
Iniciado por emprear ok. empecemos por analizar esto
todos los valores desde un form en javascript se reciben como cadenas por lo tanto las operaciones aritméticas te resultan en errores, deberías utilizar parseInt, o parseFloat para transformar dichas cadenas '45367' en números 45367
Te pongo un ejemplo (que aclaro tiene muchas imperfecciones), pero para que te des una idea
Código HTML:
Ver original<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript"> //<![CDATA[
function totales(elid){
var identificador = elid.split('_');
var registro = identificador[1];
if(document.getElementById('cantidad_'+registro).value == ''){
var cantidad = 0;
}else{
var cantidad = parseInt(document.getElementById('cantidad_'+registro).value);
}
var valor = parseInt(document.getElementById('valor_'+registro).value);
var total = cantidad*valor;
document.getElementById('total_'+registro).value = total;
}
//]]>
<td><input type="text" id="cantidad_1" onkeyup="totales(this.id)" /></td><td><input type="text" id="valor_1" onkeyup="totales(this.id)" /></td><td><input type="text" id="total_1" /></td>
fijate que la suma solo se produce si tanto cantidad como contienen números. Y yo usaría el evento onkeyup en lugar de onchange.
Ademá no aclarás si el campo cantidad es editable, por ejemplo cantidad 6 precio 3 te pòne 18, pero si modificas cantidad y no volvés al campo precio a cambiar algo, no te arregla el total, por lo que la función debería hacerse siempre en los 2 campos supongo
Bien, soy muy nuevo en ésto de Javascript, por lo que entiendo tu ejemplo, pero no sé como aplicarlo.
El único dato editable es la cantidad ninguno mas, precio se obtiene de la base de datos, asi que mientras voy modificando la cantidad, automaticamente se multiplican por el precio y dan los subtotales (la operación la realiza bien), pero la suma de todos los bubtotales no.
La función funciona bien, a excepción de la suma total y es muy poco código, por eso no quiero cambiarlo, si pudieses explicarme un poco que modificar, te lo agradecería.
Gracias.