Foros del Web » Programando para Internet » Javascript »

Problema NaN

Estas en el tema de Problema NaN en el foro de Javascript en Foros del Web. Hola tengo que hacer una suma de valores y estoy utilizando una funcion pero no hay manera de que sume todos los valores. Este es ...
  #1 (permalink)  
Antiguo 16/10/2007, 05:11
Avatar de jacin  
Fecha de Ingreso: enero-2007
Ubicación: Alicante
Mensajes: 62
Antigüedad: 17 años, 3 meses
Puntos: 2
Problema NaN

Hola tengo que hacer una suma de valores y estoy utilizando una funcion pero no hay manera de que sume todos los valores.

Este es el codigo de los valores,hay cinco valores para cada radio,esto son solo dos.Es decir existen cinco radios con nombres diferentes y de cada uno cinco valores, desde 0.0 hasta 0.4

Código HTML:
<tr class="texto" bgcolor="#F0F8FF">
   <td>- Son bastante pertinentes</td>
   <td><input name="metodologia" type="radio" class="radio" value="0.3" onClick="muestraValor('valor4',this.value);sumaEval()">&nbsp;0.3</td>
</tr>
<tr class="texto" bgcolor="#CFDDE9">
    <td>- Son muy pertinentes</td>
    <td><input name="metodologia" type="radio" class="radio" value="0.4" onClick="muestraValor('valor4',this.value);sumaEval()">&nbsp;0.4</td>
</tr> 
Y las funciones:
Código:
function muestraValor(a,b)
{
    document.getElementById(a).innerHTML = b;
}

function sumaEval()
{
    var obj = parseFloat(document.getElementById("objetivos").value);
    var org = parseFloat(document.getElementById("org_log").value);
    var per = parseFloat(document.getElementById("pertinencia").value);
    var met = parseFloat(document.getElementById("metodologia").value);
    var eva = parseFloat(document.getElementById("evaluacion").value);

    var total = eval ("obj+org+per+met+eva");

    document.getElementById('total').innerHTML = total;
}
No se si se entendera mucho , de todas formas gracias.
  #2 (permalink)  
Antiguo 16/10/2007, 05:39
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Problema NaN

Pues es difícil saber cuál es el problema sin ver de dónde salen todos esos "id", pero sin embargo te puedo decir un par de cosas.

Primero, no uses eval. ¡No es necesario para hacer una suma!
Código:
var total = obj+org+per+met+eva;
sirve para lo mismo, y es más rápido y simple.

Segundo, NaN tiene la particularidad de que, metido en una operación, el resultado será NaN. Es decir, 5+4+3+2+NaN = NaN.

Por favor especificá de dónde salen todos los ID que estás usando.


Saludos.
  #3 (permalink)  
Antiguo 16/10/2007, 05:55
Avatar de jacin  
Fecha de Ingreso: enero-2007
Ubicación: Alicante
Mensajes: 62
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Problema NaN

Código HTML:
<form name="form_evaluacion" method="post" action="index.php">
<input name="objetivos" id="objetivos" type="radio" class="radio" value="0.0" onClick="muestraValor('valor1',this.value);" >&nbsp;0.0

<div id="valor1" align="center" style="font-size:25px;font-weight:bold"></div>

<input name="objetivos" id="objetivos" type="radio" class="radio" value="0.1" onClick="muestraValor('valor1',this.value);sumaEval(0.1,0.2)" >&nbsp;0.1

<input name="objetivos" id="objetivos" type="radio" class="radio" value="0.2" onClick="muestraValor('valor1',this.value);sumaEval()" >&nbsp;0.2

<input name="objetivos" id="objetivos" type="radio" class="radio" value="0.3" onClick="muestraValor('valor1',this.value);sumaEval()" >&nbsp;0.3

<input name="objetivos" id="objetivos" type="radio" class="radio" value="0.4" onClick="muestraValor('valor1',this.value);sumaEval()" <?if($objetivos == 0.4)echo"checked"?> <?=$estado_select?>>&nbsp;0.4

<input name="org_log" type="radio" class="radio" value="0.0" onClick="muestraValor('valor2',this.value);sumaEval()" >&nbsp;0.0

<div id="valor2" align="center" style="font-size:25px;font-weight:bold"></div>

<input name="org_log" type="radio" class="radio" value="0.1" onClick="muestraValor('valor2',this.value);sumaEval()" >&nbsp;0.1

<input name="org_log" type="radio" class="radio" value="0.2" onClick="muestraValor('valor2',this.value);sumaEval()" >&nbsp;0.2

<input name="org_log" type="radio" class="radio" value="0.3" onClick="muestraValor('valor2',this.value);sumaEval()" >&nbsp;0.3

<input name="org_log" type="radio" class="radio" value="0.4" onClick="muestraValor('valor2',this.value);sumaEval()" >&nbsp;0.4

<input name="pertinencia" type="radio" class="radio" value="0.0" onClick="muestraValor('valor3',this.value);sumaEval()" >&nbsp;0.0

<div id="valor3" align="center" style="font-size:25px;font-weight:bold"></div>

<input name="pertinencia" type="radio" class="radio" value="0.1" onClick="muestraValor('valor3',this.value);sumaEval()" >&nbsp;0.1

<input name="pertinencia" type="radio" class="radio" value="0.2" onClick="muestraValor('valor3',this.value);sumaEval()" >&nbsp;0.2

<input name="pertinencia" type="radio" class="radio" value="0.3" onClick="muestraValor('valor3',this.value);sumaEval()" >&nbsp;0.3

<input name="pertinencia" type="radio" class="radio" value="0.4" onClick="muestraValor('valor3',this.value);sumaEval()" >&nbsp;0.4

<input name="metodologia" type="radio" class="radio" value="0.0" onClick="muestraValor('valor4',this.value);sumaEval()" >&nbsp;0.0

<div id="valor4" align="center" style="font-size:25px;font-weight:bold"></div>

<input name="metodologia" type="radio" class="radio" value="0.1" onClick="muestraValor('valor4',this.value);sumaEval()" >&nbsp;0.1

<input name="metodologia" type="radio" class="radio" value="0.2" onClick="muestraValor('valor4',this.value);sumaEval()" >&nbsp;0.2<

<input name="metodologia" type="radio" class="radio" value="0.3" onClick="muestraValor('valor4',this.value);sumaEval()" >&nbsp;0.3

<input name="metodologia" type="radio" class="radio" value="0.4" onClick="muestraValor('valor4',this.value);sumaEval()" >&nbsp;0.4

<input name="evaluacion" type="radio" class="radio" value="0.0" onClick="muestraValor('valor5',this.value);sumaEval()" >&nbsp;0.0

<div id="valor5" align="center" style="font-size:25px;font-weight:bold">
</div>

<input name="evaluacion" type="radio" class="radio" value="0.1" onClick="muestraValor('valor5',this.value);sumaEval()" >&nbsp;0.1

<input name="evaluacion" type="radio" class="radio" value="0.2" onClick="muestraValor('valor5',this.value);sumaEval()" >&nbsp;0.2

<input name="evaluacion" type="radio" class="radio" value="0.3" onClick="muestraValor('valor5',this.value);sumaEval()" >&nbsp;0.3

<input name="evaluacion" type="radio" class="radio" value="0.4" onClick="muestraValor('valor5',this.value);sumaEval()" >&nbsp;0.4

<div id="total" align="center" style="font-size:13px;font-weight:bold">&nbsp;</div> 
  #4 (permalink)  
Antiguo 16/10/2007, 13:13
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Problema NaN

Solamente los botones "objetivos" tienen ID declarado, los demás elementos no.

Esto hace que getElementById falle.

Por otro lado, ID es un atributo que identifica a un (y solamente un) elemento, por lo tanto no pueden haber 2 elementos distintos con el mismo ID. Fallará por ese lado también.

No estoy seguro de cómo podrías saber si un elemento está seleccionado o no, ya que aunque los múltiples IDs iguales funcionaran, todos te darían un valor cualquiera (o mejor dicho, cada uno de los ID te daría su valor sin importar si está marcado o no)

Creo que la forma sería:

Código:
var elementos = document.getElementsByName("objetivos");
var valor = 0;
for (i = 0; i < elementos.length; i++)
{
    if (elementos[i].selected == true)
    {
        valor = elementos.value;
        break;
    }
}
Así, la variable "valor" queda con el valor del botón marcado.


Saludos.
  #5 (permalink)  
Antiguo 17/10/2007, 01:45
Avatar de jacin  
Fecha de Ingreso: enero-2007
Ubicación: Alicante
Mensajes: 62
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Problema NaN

ok, gracias
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.