Corrección de un test

Estoy intentando crear un test y corregirlo en la misma página por medio de javascript. Pero no consigo que me muestre los resultados en el formulario de abajo.
Pego el código y a ver si me puedes echar un cable. Gracias
<html>
<head>
<title>Corrección de un test</title>
<script language="JavaScript"><!--
function corregir(){
var p2
var p2
var p3
var aciertos = 0
var fallos = 0
var blancos = 0
var nota
var notaFinal
<!-- 1º pregunta-->
if (document.preguntas.pregunta1[p11].checked==true){
   p1 = 1;
   aciertos++;
}else if (document.preguntas.pregunta1[p12].checked==true){
      p1 = -0.5;
         fallos++;
}else if (document.preguntas.pregunta1[p13].checked==true){
      p1 = -0.5;
        fallos++;
}else if (document.preguntas.pregunta1[p14].checked==true){
      p1 = -0.5;
         fallos++;
}else{
      p1= -0.1;
      blancos++;
      }
<!-- 2º pregunta-->
if (document.preguntas.pregunta2[p21].checked==true){
   p2 = 1;
   aciertos++;
}else if (document.preguntas.pregunta2[p22].checked==true){
      p2 = -0.5;
         fallos++;
}else if (document.preguntas.pregunta2[p23].checked==true){
      p2 = -0.5;
         fallos++;
}else if (document.preguntas.pregunta2[p24].checked==true){
      p2 = -0.5;
         fallos++;
}else{
      p2= -0.1;
      blancos++;
         }
<!-- 3º pregunta-->
if (document.preguntas.pregunta3[p31].checked==true){
   p3 = 1;
   aciertos++;
}else if (document.preguntas.pregunta3[p32].checked==true){
      p3 = -0.5;
         fallos++;
}else if (document.preguntas.pregunta3[p33].checked==true){
      p3 = -0.5;
        fallos++;
}else if (document.preguntas.pregunta3[p34].checked==true){
      p3 = -0.5;
         fallos++;
}else{
      p3= -0.1;
      blancos++;
      }
nota = p1+p2+p3;
if(nota<0){
puntuacion = 0;
}else{
puntuacion = nota;
}
document.resultado.getElementById('aciertos').value = aciertos;
document.resultado.getElementById('fallos').value = fallos;
document.resultado.getElementById('blancos').value = blancos;
document.resultado.getElementById('puntuacion').value = puntuacion;
}
//--></script>
</head>
<body>
<form name="preguntas">
<p><!-- Primera pregunta -->
    1.- Este es el enunciado de la primera pregunta del test.  </p>
<p>
    <input type="radio" name="pregunta1" id="p11" value="A"> Texto de la respuesta A.  </p>
<p>
    <input type="radio" name="pregunta1" id="p12" value="B"> Texto de la respuesta B.  </p>
<p>
    <input type="radio" name="pregunta1" id="p13" value="C"> Texto de la respuesta C.  </p>
<p>
    <input type="radio" name="pregunta1" id="p14" value="D"> Texto de la respuesta D.  </p>
<p> </p>
<!-- Segunda pregunta -->2.- Este es el enunciado de
la segunda pregunta del test.
<p> </p>
<p>
    <input type="radio" name="pregunta2" id="p21" value="A"> Texto de la respuesta A.  </p>
<p>
    <input type="radio" name="pregunta2" id="p22" value="B"> Texto de la respuesta B.  </p>
<p>
    <input type="radio" name="pregunta2" id="p23" value="C"> Texto de la respuesta C.  </p>
<p>
    <input type="radio" name="pregunta2" id="p24" value="D"> Texto de la respuesta D.  </p>
<p> </p>
<!-- Tercera pregunta -->3.- Este es el enunciado de
la tercera pregunta del test.
<p> </p>
<p>
    <input type="radio" name="pregunta3" id="p31" value="A"> Texto de la respuesta A.  </p>
<p>
    <input type="radio" name="pregunta3" id="p32" value="B"> Texto de la respuesta B.  </p>
<p>
    <input type="radio" name="pregunta3" id="p33" value="C"> Texto de la respuesta C.  </p>
<p>
    <input type="radio" name="pregunta3" id="p34" value="D"> Texto de la respuesta D.  </p>
<p> </p>
</form>
<form name="boton"><input value="CORREGIR" type="submit" name="boton" object="">
</form>
<br><br>
<b>RESULTADO DEL TEST</b>
<p>
<form name="resultado" action="">
Has acertado <input size="3" name="aciertos"> preguntas <br>
Has fallado en <input size="3" name="fallos"> preguntas <br>
Has dejado de responder <input size="3" name="blancos"> preguntas
<p>
PUNTUACIÓN: <input size="5" name="puntuacion"> puntos
</form></p>
</body>
</html>

1 respuesta

Respuesta
1
El problema es obvio, y es el siguiente:
El formulario donde defines el resultado que vas a mostrar (resultado) tiene definidos sus elementos (los input's) a través del atributo name, y desde JavaScript estas intentando acceder a ellos a través de su id (getElementById)...
Tienes que aclarar conceptos, o usas name o id, ya que no es lo mismo:
<input type='text' name='puntuacion' />
que...
<input type='text' id='puntuacion' />
A modo de explicación, name es el nombre que luego podrás usar si reenvías la información de un formulario a otra página PHP (name='valor' luego pasa a ser $_POST[valor]). Por otro lado, id solo sirve para identificar ese elemento dentro de la estructura DOM (Document Object Model) mediante JavaScript.
El párrafo anterior podría habérmelo ahorrado, pero solo pretendo llamar tu curiosidad para que te documentes al respecto y entiendas por completo el error...
Con que pongas id='XXXXX' en lugar de name='XXXXX' en todos los input's definidos dentro del formulario resultado te funcionará.
Ok, muchas gracias, he cambiado lo que me dices pero sigue sin mostrarme resultados, por lo que supongo tendré algo mal.. he visto que la linea del botón CORREGIR esta mal, y en realidad es esta la que pongo..
<FORM name="boton">
    <input type="button"  name="boton" value=" CORREGIR " onclick="corregir()"/>
</FORM>
No se que es lo que me falla, estoy empezando a aprender, pero se me escapan algunos conceptos.
Gracias
Bien, efectivamente, lo has corregido, pero no en todas las indidencias. A la vez que has hecho lo propio en el formulario de respuestas, deberás hacer lo mismo en el formulario de preguntas, ¿no crees?
Estoy observando que al...
<input type="radio" name="pregunta1" id="p11" value="A">
...estas intentando acceder mediante la instruccion Javascript...
if (document.preguntas.pregunta1[p11].checked==true)
¿ Por que no usas la siguiente instruccion ?
if (document.getElementById('p11').checked==true)
A su vez, la instrucciondocument.resultado.getElementById('aciertos').value = aciertos; no es correcta. La forma correcta de usar getElementById seria document.resultado.getElementById('aciertos').value = aciertos; puesto que es una función de ámbito global dentro de DOM.
Prueba y ya me cuentas.
Insisto en la comprensión del error. Te recomiendo la lectura del siguiente enlace:
http://www.w3schools.com/HTMLDOM/met_doc_getelementbyid.asp ya que con mi respuesta te soluciono el error pero... ¿Entiendes por que exactamente?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas