Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Una ayudita con el codigo

Estas en el tema de Una ayudita con el codigo en el foro de Javascript en Foros del Web. Estoy aprendiendo javascript y quería una ayudita con el código. No logro que me ejecute la función corregir y que la ponga en el textarea ...
  #1 (permalink)  
Antiguo 30/09/2013, 10:03
 
Fecha de Ingreso: septiembre-2013
Mensajes: 2
Antigüedad: 10 años, 7 meses
Puntos: 0
Una ayudita con el codigo

Estoy aprendiendo javascript y quería una ayudita con el código. No logro que me ejecute la función corregir y que la ponga en el textarea correspondiente. He puesto el alert para poder saber si la función está bien.
Gracias y perdonad a este novato!!

<html>
<head>
<title>Corrección de un test</title>
<script type="text/javascript">

function corregir()
{
for(var i = 1; i <= 2; i++) {
for (var j=1; j <= 4 ; j++) {
var verdadero="p"+i+j+"v";
var correctas=0;
if (document.getElementById(verdadero).checked == true) {
correctas=correctas+1;
}
}
}
alert(correctas);
}



</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="p12v" 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>


<!-- Segunda pregunta -->
2.- Este es el enunciado de la segunda pregunta del test. </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="p24v" value="D" /> Texto de la respuesta D. </p>
<p>


<!-- Tercera pregunta -->
3.- Este es el enunciado de la tercera pregunta del test. </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="p33v" 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 type="button" name="boton" value=" CORREGIR " onClick="corregir()"/>
</FORM>


<br><br>

<b>RESULTADO DEL TEST</b> <P>
<form name="resultado" action="">

Has acertado <input type="text" size="3" name="aciertos" /> preguntas <br>
Has fallado en <input type="text" size="3" name="fallos" value=""/> preguntas <br>
Has dejado de responder <input size="3" name="blancos" type="text" value=""/> preguntas <P>
PUNTUACIÓN: <input type="text" size="5" name="puntuacion" value=""/> puntos

</form>


</body>
</html>
  #2 (permalink)  
Antiguo 30/09/2013, 10:14
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Una ayudita con el codigo

tu codigo está mal implementado, si usas una consola de depuración notarás que al primer intento de conseguir el objeto p11v te dirá que es nulo, por el cual debes evaluar primero si existe.

por otro lado, hacer un test en JS es completamente vulnerable, pero si tu objetivo es aprender, yo te recomiendo que mejor tuvieras en un arreglo global las respuestas correctas y que solo verifiques que de los grupos el value que esté marcado coincida con la respuesta verdadera, y de preferencia usar un lenguaje del servidor
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 30/09/2013, 13:15
Avatar de dAvidcA  
Fecha de Ingreso: septiembre-2009
Ubicación: /home/dev/
Mensajes: 73
Antigüedad: 14 años, 7 meses
Puntos: 7
Respuesta: Una ayudita con el codigo

Hola elangelrojo, primero que todo recuerda encerrar el código en las etiquetas para mostrarlo en el foro así:


[HIGHLIGHT="HTML"] CÓDIGO [/HIGHLIGHT]


Segundo: Como dice maycolalvarez es un test muy vulnerable (es fácil ver las respuestas), debes aprender y pensar una forma de hacerlo de manera segura con todos los tips que te mencionaron en la respuesta anterior.

Quizás el código lo estés haciendo de manera académica es buena forma de empezar (como ejercicio, más no como utilidad por su seguridad), de igual forma dejo el código JavaScript funcional para aprendizaje:

El código está comentado explicando cada paso.

Código Javascript:
Ver original
  1. function corregir() {          
  2.     var objRadios=document.getElementsByTagName('input'); //Obtengo todos los input
  3.     var subElements, correctas = 0; //Inicializo variables de trabajo
  4.    
  5.     //Recorro todos los input
  6.     for(i=0;i<objRadios.length;i++){       
  7.         /*
  8.         Se verifica lo siguiente:
  9.         1. Que sean de tipo radio.
  10.         2. (Con expresiones regulares) Que su ID termine en letra v... Ej: p12v
  11.         3. Que el radio esté seleccionado (checked)
  12.         */
  13.         if((objRadios[i].type=='radio') && (objRadios[i].id).match(/[v|V]$/) && objRadios[i].checked){
  14.             correctas++; //Si lo anterior es correcto aumenta en 1 la variable
  15.         }
  16.     }
  17.     alert("Preguntas correctas: "+correctas); //Se muestra el resultado
  18. }

Saludos.
  #4 (permalink)  
Antiguo 01/10/2013, 05:09
 
Fecha de Ingreso: septiembre-2013
Mensajes: 2
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Una ayudita con el codigo

Gracias por vuestra ayuda…!!!
El hacer un test en javascript es un mero ejercicio de aprendizaje.

Etiquetas: formulario
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 07:18.