Foros del Web » Programando para Internet » Javascript »

Problema JS para cuestionario

Estas en el tema de Problema JS para cuestionario en el foro de Javascript en Foros del Web. Estoy haciendo un cuestionario tipo test en html5 y JS, pero cuando pongo las funciones para que me aparezcan las respuestas correctas no aparecen. He ...
  #1 (permalink)  
Antiguo 25/06/2014, 10:52
 
Fecha de Ingreso: junio-2014
Mensajes: 1
Antigüedad: 10 años, 5 meses
Puntos: 0
Problema JS para cuestionario

Estoy haciendo un cuestionario tipo test en html5 y JS, pero cuando pongo las funciones para que me aparezcan las respuestas correctas no aparecen. He cogido la plantilla de http://fcalzado.es/blog/tutorial-plantilla-cuestionario-con-evaluacion. En el ejemplo que da sí que funciona, pero puesto tal cual en mi test (es un poco diferente), no aparecen.

El original:

<script type="text/javascript"> <!-- var numPreg = 10; //*** numero de preguntas *** var numElecciones = 3; //*** numero de alternativas de respuesta *** var respCorrectas = new Array(numPreg); //*** entre parentesis el numero de preguntas *** respCorrectas[0] = "Texto de la respuesta correcta a la pregunta número 1"; respCorrectas[1] = "Texto de la respuesta correcta a la pregunta número 2"; respCorrectas[2] = "Texto de la respuesta correcta a la pregunta número 3"; respCorrectas[3] = "Texto de la respuesta correcta a la pregunta número 4"; respCorrectas[4] = "Texto de la respuesta correcta a la pregunta número 5"; respCorrectas[5] = "Texto de la respuesta correcta a la pregunta número 6"; respCorrectas[6] = "Texto de la respuesta correcta a la pregunta número 7"; respCorrectas[7] = "Texto de la respuesta correcta a la pregunta número 8"; respCorrectas[8] = "Texto de la respuesta correcta a la pregunta número 9"; respCorrectas[9] = "Texto de la respuesta correcta a la pregunta número 10"; //*** a partir de aqui no es necesario modificar el codigo *** function corregir(form) { var puntuacion = 0; var eleccActual; var currSelection; for (i=0; i<numPreg; i++) { eleccActual = i*numElecciones; for (j=0; j<numElecciones; j++) { currSelection = form.elements[eleccActual + j]; if (currSelection.checked) { if (currSelection.value == respCorrectas[i]) { puntuacion++; break; } } } } puntuacion = Math.round(puntuacion/numPreg*100); form.porcentaje.value = puntuacion + "%"; if (puntuacion > 99) {document.examen.nota.value = "Matrícula de Honor";} else if (puntuacion > 89) {document.examen.nota.value = "Sobresaliente";} else if (puntuacion > 79) {document.examen.nota.value = "Notable alto";} else if (puntuacion > 69) {document.examen.nota.value = "Notable bajo";} else if (puntuacion > 59) {document.examen.nota.value = "Bien";} else if (puntuacion > 49) {document.examen.nota.value = "Suficiente";} else {document.examen.nota.value = "Insuficiente";} var correctrespCorrectas = ""; for (i=1; i<=numPreg; i++) { correctrespCorrectas += i + ". " + respCorrectas[i-1] + "rn"; } form.soluciones.value = correctrespCorrectas; } // --> </script>

El mio:

<script type="text/javascript"> var numPreg = 50; var numElecciones = 4; var respCorrectas = new Array(50); respCorrectas[0] = "Casablanca"; respCorrectas[1] = "Tener y no tener"; respCorrectas[2] = "Lars Von Trier"; respCorrectas[3] = "Eyes Wide Shut"; respCorrectas[4] = "Algunos hombres buenos"; respCorrectas[5] = "Joker"; respCorrectas[6] = "Infiltrados"; respCorrectas[7] = "James Cameron"; respCorrectas[8] = "Jim Carrey"; respCorrectas[9] = "The Green Hornet"; respCorrectas[10] = "McLovin"; respCorrectas[11] = "Un parque de atracciones"; respCorrectas[12] = "Mark Zuckerberg"; respCorrectas[13] = "Béisbol"; respCorrectas[14] = "Economía"; respCorrectas[15] = "Malas tierras"; respCorrectas[16] = "Pacífico"; respCorrectas[17] = "Viggo Mortensen"; respCorrectas[18] = "Acordes y desacuerdos"; respCorrectas[19] = "Alvy Singer"; respCorrectas[20] = "Michael Corleone"; respCorrectas[21] = "Demencia 13"; respCorrectas[22] = "Julio Cortázar"; respCorrectas[23] = "Tomás Moro"; respCorrectas[24] = "Sed de mal"; respCorrectas[25] = "Frank Sinatra"; respCorrectas[26] = "Siete días de mayo"; respCorrectas[27] = "Deborah Kerr"; respCorrectas[28] = "De repente, el último verano"; respCorrectas[29] = "John Huston"; respCorrectas[30] = "¿Quieén teme a Virginia Woolf?"; respCorrectas[31] = "Anton Ego"; respCorrectas[32] = "¿Arde París?"; respCorrectas[33] = "Sophia Loren y Eleanora Brown"; respCorrectas[34] = "Giorgio Bassani"; respCorrectas[35] = "La caída de los dioses"; respCorrectas[36] = "Modesty Blaise, superagente femenino"; respCorrectas[37] = "Senderos de gloria"; respCorrectas[38] = "Un joven soñador provinciano"; respCorrectas[39] = "Leonard Cohen"; respCorrectas[40] = "Los amantes de la noche"; respCorrectas[41] = "El desprecio"; respCorrectas[42] = "Los pianos mecánicos"; respCorrectas[43] = "18.000"; respCorrectas[44] = "Shorty Rogers and His Giants"; respCorrectas[45] = "Peter Sellers"; respCorrectas[46] = "Gran Hotel"; respCorrectas[47] = "Desmontando a Harry"; respCorrectas[48] = "Leonard y Arthur"; respCorrectas[49] = "15"; function corregir(form) { var puntuacion = 0; var eleccActual; var currSelection; for (i=0; i<numPreg; i++) { eleccActual = i*numElecciones; for (j=0; j<numElecciones; j++) { currSelection = form.elements[eleccActual + j]; if (currSelection.checked) { if (currSelection.value == respCorrectas[i]) { puntuacion++; break; } } } } puntuacion = Math.round(puntuacion/numPreg*100); form.porcentaje.value = puntuacion + "%"; if (puntuacion > 99) {document.examen.nota.value = "Matrícula de Honor";} else if (puntuacion > 89) {document.examen.nota.value = "Sobresaliente";} else if (puntuacion > 79) {document.examen.nota.value = "Notable alto";} else if (puntuacion > 69) {document.examen.nota.value = "Notable bajo";} else if (puntuacion > 59) {document.examen.nota.value = "Bien";} else if (puntuacion > 49) {document.examen.nota.value = "Suficiente";} else {document.examen.nota.value = "Insuficiente";} var correctrespCorrectas = ""; for (i=1; i<=numPreg; i++) { respCorrectas+=i+ ". "+ espCorrectas[i-1]+"rn"; } form.soluciones.value=correct.respCorrectas; }
</script>

Podrían decirme por que no funciona?
  #2 (permalink)  
Antiguo 25/06/2014, 20:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Problema JS para cuestionario

Será que a Javascript no le gustan los deportes y espectáculos?

Escribir un código así, sin saltos de línea, es mucho más fácil que revisarlo. Te sugiero dos opciones:

1- Inserta un salto de línea después de cada fin de sentencia, normalmente después de un punto y coma. Luego vuelve a colocar el código aquí, usando la herramienta highlight y es casi seguro que habrá quien te ayude.

2- Revisa la consola de errores en un navegador decente (Firefox o Chrome), ahí te dirá en qué línea está el error... ahhh, pero sin saltos de línea, creo que de todos modos es mejor insertar los saltos de línea.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 25/06/2014, 20:28
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: Problema JS para cuestionario

Bueno... y donde esta el FORM ? o sea falta el HTML sobre el que funciona corregir() ... imposible debuguear asi

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.    
  3.     var numPreg = 50;
  4.     var numElecciones = 4;  
  5.    
  6.     var respCorrectas = new Array(50);
  7.    
  8.     respCorrectas[0] = "Casablanca";
  9.     respCorrectas[1] = "Tener y no tener";
  10.     respCorrectas[2] = "Lars Von Trier";
  11.     respCorrectas[3] = "Eyes Wide Shut";
  12.     respCorrectas[4] = "Algunos hombres buenos";
  13.     respCorrectas[5] = "Joker";
  14.     respCorrectas[6] = "Infiltrados";
  15.     respCorrectas[7] = "James Cameron";
  16.     respCorrectas[8] = "Jim Carrey";
  17.     respCorrectas[9] = "The Green Hornet";
  18.     respCorrectas[10] = "McLovin";
  19.     respCorrectas[11] = "Un parque de atracciones";
  20.     respCorrectas[12] = "Mark Zuckerberg";
  21.     respCorrectas[13] = "Béisbol";
  22.     respCorrectas[14] = "Economía";
  23.     respCorrectas[15] = "Malas tierras";
  24.     respCorrectas[16] = "Pacífico";
  25.     respCorrectas[17] = "Viggo Mortensen";
  26.     respCorrectas[18] = "Acordes y desacuerdos";
  27.     respCorrectas[19] = "Alvy Singer";
  28.     respCorrectas[20] = "Michael Corleone";
  29.     respCorrectas[21] = "Demencia 13";
  30.     respCorrectas[22] = "Julio Cortázar";
  31.     respCorrectas[23] = "Tomás Moro";
  32.     respCorrectas[24] = "Sed de mal";
  33.     respCorrectas[25] = "Frank Sinatra";
  34.     respCorrectas[26] = "Siete días de mayo";
  35.     respCorrectas[27] = "Deborah Kerr";
  36.     respCorrectas[28] = "De repente, el último verano";
  37.     respCorrectas[29] = "John Huston";
  38.     respCorrectas[30] = "¿Quieén teme a Virginia Woolf?";
  39.     respCorrectas[31] = "Anton Ego";
  40.     respCorrectas[32] = "¿Arde París?";
  41.     respCorrectas[33] = "Sophia Loren y Eleanora Brown";
  42.     respCorrectas[34] = "Giorgio Bassani";
  43.     respCorrectas[35] = "La caída de los dioses";
  44.     respCorrectas[36] = "Modesty Blaise, superagente femenino";
  45.     respCorrectas[37] = "Senderos de gloria";
  46.     respCorrectas[38] = "Un joven soñador provinciano";
  47.     respCorrectas[39] = "Leonard Cohen";
  48.     respCorrectas[40] = "Los amantes de la noche";
  49.     respCorrectas[41] = "El desprecio";
  50.     respCorrectas[42] = "Los pianos mecánicos";
  51.     respCorrectas[43] = "18.000";
  52.     respCorrectas[44] = "Shorty Rogers and His Giants";
  53.     respCorrectas[45] = "Peter Sellers";
  54.     respCorrectas[46] = "Gran Hotel";
  55.     respCorrectas[47] = "Desmontando a Harry";
  56.     respCorrectas[48] = "Leonard y Arthur";
  57.     respCorrectas[49] = "15";
  58.  
  59.     function corregir(form)
  60.     {
  61.         var puntuacion = 0;
  62.         var eleccActual;
  63.         var currSelection;
  64.         for (i = 0; i < numPreg; i++) {
  65.             eleccActual = i * numElecciones;
  66.             for (j = 0; j < numElecciones; j++) {
  67.                 currSelection = form.elements[eleccActual + j];
  68.                 if (currSelection.checked) {
  69.                     if (currSelection.value == respCorrectas[i]) {
  70.                         puntuacion++;
  71.                         break;
  72.                     }
  73.                 }
  74.             }
  75.         }
  76.         puntuacion = Math.round(puntuacion / numPreg * 100);
  77.         form.porcentaje.value = puntuacion + "%";
  78.         if (puntuacion > 99) {
  79.             document.examen.nota.value = "Matrícula de Honor";
  80.         } else if (puntuacion > 89) {
  81.             document.examen.nota.value = "Sobresaliente";
  82.         } else if (puntuacion > 79) {
  83.             document.examen.nota.value = "Notable alto";
  84.         } else if (puntuacion > 69) {
  85.             document.examen.nota.value = "Notable bajo";
  86.         } else if (puntuacion > 59) {
  87.             document.examen.nota.value = "Bien";
  88.         } else if (puntuacion > 49) {
  89.             document.examen.nota.value = "Suficiente";
  90.         } else {
  91.             document.examen.nota.value = "Insuficiente";
  92.         }
  93.         var correctrespCorrectas = "";
  94.         for (i = 1; i <= numPreg; i++) {
  95.             respCorrectas += i + ". " + espCorrectas[i - 1] + "rn";
  96.         }
  97.         form.soluciones.value = correct.respCorrectas;
  98.     }
  99.        
  100. </script>

Desde ya que la forma de ingresar datos a ese array es para morirse de la angustia:


Cita:
respCorrectas[2] = "Lars Von Trier";
respCorrectas[3] = "Eyes Wide Shut";
...
respCorrectas[28] = "De repente, el último verano";
respCorrectas[29] = "John Huston";
Yo las ingresaria asi:

Código Javascript:
Ver original
  1. respCorrectas = [
  2.     "Tener y no tener",
  3.     "Lars Von Trier",
  4.     "Eyes Wide Shut"];

Bueno... la lista sigue... pero se entiende


PD: me toco usar jsBeautifier ... sino me volvia chino
__________________
Salu2!

Última edición por Italico76; 25/06/2014 a las 20:35

Etiquetas: cuestionario, funcion, html, js, select
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 06:03.