Foros del Web » Programando para Internet » Javascript »

Comprobar un test con javascript

Estas en el tema de Comprobar un test con javascript en el foro de Javascript en Foros del Web. Muy buenas. Tengo una duda con javascript. Os comento aver si alguien me puede echar una mano. Estoy haciendo un test, de 3 respuestas cada ...
  #1 (permalink)  
Antiguo 26/11/2010, 02:18
 
Fecha de Ingreso: octubre-2010
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
Comprobar un test con javascript

Muy buenas. Tengo una duda con javascript. Os comento aver si alguien me puede echar una mano.

Estoy haciendo un test, de 3 respuestas cada pregunta y siempre 1 verdadera.

<td id="c1">
<input type="radio" id="p1f" name="p1">opcion a<br>
<input type="radio" id="p1v" name="p1">opcion b<br>
<input type="radio" id="p1f" name="p1">opcion c</td>
</td>

<td id="c2">
<input type="radio" id="p2f" name="p2">opcion a<br>
<input type="radio" id="p2f" name="p2">opcion b<br>
<input type="radio" id="p2v" name="p2">opcion c
</td>

etc etc.... ( las respuestas con id=pXv son las respuestas correctas)

En el javaScript, quiero crear una funcion que vaya recorriendo todas las respuestas, y en caso de que haya acertado, el fondo de la celda se cambie a color verde y si no a color rojo. La funcion javaScript que estoy haciendo es algo asi.


function resolver()
{
for(var i = 1; i <= 50; i++) {
var verdadero="p"+i+"v";
if (document.forms.s8p1.verdadero.checked == true)
document.getElementById("c"+i).style.backgroundCol or="#9BFFA0";
else
document.getElementById("c"+i).style.backgroundCol or="#FF8C8C";
*/
}
}



Pero no hace nada.
Si alguien me puede aconsejar se lo agradeceria.

Muchas gracias de antemano y un saludo!
  #2 (permalink)  
Antiguo 26/11/2010, 06:56
 
Fecha de Ingreso: septiembre-2004
Ubicación: La Plata Argentina
Mensajes: 128
Antigüedad: 19 años, 7 meses
Puntos: 9
Respuesta: Comprobar un test con javascript

Fijate que el problema mas serio lo tienes en el if :

<html>
<head>

<title></title>
<script>
function resolver()
{
for(var i = 1; i <= 2; i++) {
var verdadero="p"+i+"v";
if (document.getElementById(verdadero).checked == true)
document.getElementById("c"+i).style.backgroundCol or="#9BFFA0";
else
document.getElementById("c"+i).style.backgroundCol or="#FF8C8C";
}
}
</script>

</head>
<body>
<table border="1">

<tr>
<td id="c1">
<input type="radio" id="p1f" name="p1">opcion a<br>
<input type="radio" id="p1v" name="p1">opcion b<br>
<input type="radio" id="p1f" name="p1">opcion c</td>
</td>
</tr><tr>
<td id="c2">
<input type="radio" id="p2f" name="p2">opcion a<br>
<input type="radio" id="p2f" name="p2">opcion b<br>
<input type="radio" id="p2v" name="p2">opcion c
</td>
</tr>
</table>
<br/>
<button onclick="resolver();">resolver</button>
</body>
</html>



Saludos
  #3 (permalink)  
Antiguo 26/11/2010, 06:57
 
Fecha de Ingreso: septiembre-2004
Ubicación: La Plata Argentina
Mensajes: 128
Antigüedad: 19 años, 7 meses
Puntos: 9
Respuesta: Comprobar un test con javascript

Ahh, no deberias tener dos elementos con el mismo id. Para el script, puedes dejar sin id las opciones falsas.

saluti
  #4 (permalink)  
Antiguo 26/11/2010, 07:13
 
Fecha de Ingreso: octubre-2010
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Comprobar un test con javascript

El problema es que no se puede concatenar para llamar a un objeto no?
he estado mirando por internet y me parece que ese es el problema. pero... como lo podria hacer entonces?


Tienes razon en cuanto a las id de las opciones falsas, ya las he quitao. :)
  #5 (permalink)  
Antiguo 26/11/2010, 08:23
 
Fecha de Ingreso: septiembre-2004
Ubicación: La Plata Argentina
Mensajes: 128
Antigüedad: 19 años, 7 meses
Puntos: 9
Respuesta: Comprobar un test con javascript

Fijate que en el ejemplo que te puse, concateno para formar el string que es en realidad lo que tu hiciste originalmente y funciona sin problema. En realidad el ejemplo que te puse funciona, dime cual es tu duda ahora.

Saludos
  #6 (permalink)  
Antiguo 26/11/2010, 08:44
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Comprobar un test con javascript

no sería más sencillo y en cuestión de rendimiento más eficaz, usar una matriz literal con todos los valores verdaderos?? a esto se le añade el uso de getElementsByTagName para obtener la colección de todos los input, se recorre el bucle y se valida que radio esta marcado. aquel que esté marcado, se compara con el elemento de la matriz que corresponda. no sé si me he explicado bien
  #7 (permalink)  
Antiguo 26/11/2010, 11:00
 
Fecha de Ingreso: septiembre-2004
Ubicación: La Plata Argentina
Mensajes: 128
Antigüedad: 19 años, 7 meses
Puntos: 9
Respuesta: Comprobar un test con javascript

La verdad que no lo probe pero de olfato creo que es mas rapido lo que usa kl4nd3s (que nombre !!!) porque de la forma que tu propones debes crear el puntero a todos los objetos radio mientras que de la otra solo a los radios verdaderos. Eso es 1/3 del trabajo. La matriz y el IF de chekeo lo tienen que hacer los dos metodos. Y la logica la veo igualmente robusta.

Pero siempre uno puede equivocarse dijo alguien por hispania !! jajaja

Saludos
  #8 (permalink)  
Antiguo 26/11/2010, 12:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 13 años, 7 meses
Puntos: 59
Hola. He hecho un test; aqui he puesto 5 preguntas con 3 respuestas cada una, pero puedes modificarlo:
Código Javascript:
Ver original
  1. var respuesta = new Array;
  2. var explicacionRespuesta = new Array;
  3. var tuRespuesta = new Array;
  4. var puntuacion = 0;
  5.  
  6. //aqui pones las respuestas de las preguntas (puedes agregar mas o quitar)
  7. respuesta[1] = "a";
  8. respuesta[2] = "a";
  9. respuesta[3] = "b";
  10. respuesta[4] = "a";
  11. respuesta[5] = "c";
  12.  
  13. //aqui dices cual respuesta es corecta
  14. explicacionRespuesta[1]="La respuesta corecta era A\n";
  15. explicacionRespuesta[2]="La respuesta corecta era A\n";
  16. explicacionRespuesta[3]="La respuesta corecta era B\n";
  17. explicacionRespuesta[4]="La respuesta corecta era A\n";
  18. explicacionRespuesta[5]="La respuesta corecta era C\n";
  19.  
  20.  
  21. function Motor(pregunta, respuesta){
  22.    tuRespuesta[pregunta]=respuesta;
  23. }
  24.  
  25. function Puntuacion(){
  26. var textoRespuesta = "Asi lo has hecho:\n";
  27. puntuacion=0;
  28. for(i=1;i<=5;i++){
  29.    textoRespuesta=textoRespuesta+"Pregunta "+i+": ";
  30.    if(respuesta[i] != tuRespuesta[i]){
  31.       textoRespuesta=textoRespuesta+explicacionRespuesta[i];
  32.    }
  33.    else{
  34.       textoRespuesta=textoRespuesta+"Has respondido correctamente!\n";
  35.       puntuacion++;
  36.    }
  37. }
  38.  
  39. textoRespuesta=textoRespuesta+"PUNTUACION FINAL : "+puntuacion+"\n";
  40.  
  41. textoRespuesta=textoRespuesta+"Comentario : ";
  42. if(puntuacion <= 4){textoRespuesta=textoRespuesta+"Necesitas estudiar mas!";}
  43. if(puntuacion >= 5 && puntuacion <= 6){textoRespuesta=textoRespuesta+"Te falta poco!";}
  44. if(puntuacion >= 7 && puntuacion <= 8){textoRespuesta=textoRespuesta+"Bien!";}
  45. if(puntuacion > 8){textoRespuesta=textoRespuesta+"Muy bien!";}
  46.  
  47. alert(textoRespuesta);
  48. }

Código HTML:
Ver original
  1. <form name="test">
  2.  
  3. Pregunta I<br>
  4. <input type="radio" name="p1" value="a" onClick="Motor(1, this.value)">
  5. a) respuesta 1<br>
  6. <input type="radio" name="p1" value="b" onClick="Motor(1, this.value)">
  7. b) respuesta 2<br>
  8. <input type="radio" name="p1" value="c" onClick="Motor(1, this.value)">
  9. c) respuesta 3
  10. <!-- puedes agregar mas si quieres, o quitar -->
  11. <br>
  12.  
  13. Pregunta II<br>
  14. <input type="radio" name="p2" value="a" onClick="Motor(2, this.value)">
  15. a) respuesta 1<br>
  16. <input type="radio" name="p2" value="b" onClick="Motor(2, this.value)">
  17. b) respuesta 2<br>
  18. <input type="radio" name="p2" value="c" onClick="Motor(2, this.value)">
  19. c) respuesta 3
  20. <br>
  21.  
  22. Pregunta III<br>
  23. <input type="radio" name="p3" value="a" onClick="Motor(3, this.value)">
  24. a) respuesta 1<br>
  25. <input type="radio" name="p3" value="b" onClick="Motor(3, this.value)">
  26. b) respuesta 2<br>
  27. <input type="radio" name="p3" value="c" onClick="Motor(3, this.value)">
  28. c) respuesta 3
  29. <br>
  30.  
  31. Pregunta IV<br>
  32. <input type="radio" name="p4" value="a" onClick="Motor(4, this.value)">
  33. a) respuesta 1<br>
  34. <input type="radio" name="p4" value="b" onClick="Motor(4, this.value)">
  35. b) respuesta 2<br>
  36. <input type="radio" name="p4" value="c" onClick="Motor(4, this.value)">
  37. c) respuesta 3
  38. <br>
  39.  
  40. Pregunta V<br>
  41. <input type="radio" name="p5" value="a" onClick="Motor(5, this.value)">
  42. a) respuesta 1<br>
  43. <input type="radio" name="p5" value="b" onClick="Motor(5, this.value)">
  44. b) respuesta 2<br>
  45. <input type="radio" name="p5" value="c" onClick="Motor(5, this.value)">
  46. c) respuesta 3
  47. <br>
  48. <input type="button" value="Puntuacion" onClick="Puntuacion()">
  49.  
  50. </form>
Que hace este codigo: cuando seleccionas una respuesta, lo agrega al vector tuRespuesta; cuando pulsas el boton 'Puntuacion' comprueba si tuRespuesta es igual a respuesta; si lo es, es correcto, si no, dice lo que hay en el vector explicacionRespuesta.

Si no te funciona algo, dimelo.
Saludos
__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111

Última edición por _Adrian_; 26/11/2010 a las 13:27
  #9 (permalink)  
Antiguo 26/11/2010, 14:43
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Comprobar un test con javascript

Bueno sólo comentar un par de cosas. @_Adrian_, los arrays empiezan en 0, ¿por qué empiezas todos en 1? En vez de hacer un for así a pelo, poniendo el número hasta el que hay que ir, yo lo pondría así (en el caso del código de @sysmadryn) :
Código Javascript:
Ver original
  1. for(i=1; ele=document.getElementById('p'+nb+'v'), tbl=document.getElementById('c'+nb); i++)
Para que el for continúe mientras exista un elemento con esa id. Y por último, y lo más importante, hacer una validación de un test con JS no tiene mucho sentido, porque el que lo haga puede ver las respuestas cuando quiera, ya sé que la mayoría de la gente no lo hace, pero como te topes con uno que sí sabe malo.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #10 (permalink)  
Antiguo 26/11/2010, 15:42
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Comprobar un test con javascript

a esto es a lo que me refería, hecho de una manera rápida. ahora solo es cuestión de comprobar cual de las dos opciones consume menos recursos
Cita:
<html>
<head>
<script>
var corr = ['b', 'c'];
function fnc() {
radio_checked = -1;
for(var j = 0, rad = document.getElementsByTagName('input'); j < rad.length; j++){
if(rad[j].checked) {
radio_checked++;
if (rad[j].value == corr[radio_checked]) {
document.getElementById('c_'+radio_checked).style. backgroundColor='#9BFFA0';
} else {
document.getElementById('c_'+radio_checked).style. backgroundColor='#FF8C8C';
}
}
}
}
</script>

</head>
<body>
<table>
<tr id="c_0">
<td>
<input type="radio" value="a" name="p1" />a
<input type="radio" value="b" name="p1" />b
<input type="radio" value="c" name="p1" />c
</td></tr>
<tr id="c_1">
<td>
<input type="radio" value="a" name="p2" />a
<input type="radio" value="b" name="p2" />b
<input type="radio" value="c" name="p2" />c
</td>
</tr>
<tr>
<td>
<input type="button" onclick="fnc()" value="comprobar" />
</td>
</tr>
</table>
</body>
</html>
  #11 (permalink)  
Antiguo 26/11/2010, 15:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 525
Antigüedad: 13 años, 7 meses
Puntos: 59
@_cronos2, al final, el alert(textoRespuesta);, dice asi:
Código:
Pregunta 1: ... ...
Pregunta 2: ... ...
Si empiezo los arrays en 0, dice:
Código:
Pregunta 0: ...
Pregunta 1: ...
Y para que no sea necesario poner otro for (para que empieze por 'Pregunta 1'), he empezado directamente los arrays en 1.
No importa, el [0] es null, pero no lo lee.

Saludos
__________________
01011111 01000001 01100100 01110010 01101001 01100001 01101110 01011111
  #12 (permalink)  
Antiguo 26/11/2010, 15:59
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Comprobar un test con javascript

Bueno pero puedes poner (i+1) para que empieze en 1, esque se me hace raro ver un array empezando por 1, aunque es correcto igualmente.
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: comprobar, test
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 22:37.