PDA

Ver la versión completa : [Programación] Haciendo un cuestionario con jquery y json



akualung
14/11/2012, 22:27
Hola. Para practicar un poco jquery y json, me he propuesto un pequeño ejercicio que consiste en lo siguiente:

En esta web hay una aplicación java (supongo que un applet) http://www.javaranch.com/game/game2.jsp que simula un cuestionario de 12 preguntas sobre el lenguaje java. Me he propuesto rehacerlo en jquery para que se pueda visualizar en dispositivos android. Casi lo tengo acabado, pero me falta un pequeño detale que no sé cómo solucionar.

Me gustaría que, si pulsas el botón de "responder" sin haber elegido ninguna opción de respuesta, no pasara nada (para así forzar al usuario a elegir una pregunta), pero no lo he conseguido.

El código donde intento controlar que hayas elegido una respuesta es este:

$("#done").click( function() {
var respEscogida = unescape($("input[name='answers']:checked").val());

if (respEscogida !== undefined) {

if (respEscogida == arrayPreguntas[0]['correctAnswer']) {


numAcertadas++;


arrayPreguntas.shift(); //eliminamos la pregunta del array


mostrarPregunta();

}

else {


//mostrar respuesta correcta y explicacion


$('#correctAnswer').html("Answer: " + arrayPreguntas[0]['correctAnswer']);


$('#explanation').html(arrayPreguntas[0]['explanation']);


$("#done").hide();


$("#next").show();

}
}
})

He probado con != también con !== y he probado a poner undefined en mayúsculas, entre comillas simples, dobles, etc, a probar con "null" en lugar de "undefined", pero nada de nada. Si no escojo ninguna respuesta, se me dispara el mismo código que si hubiese respondido mal la pregunta y lo que quiero es que sencillamente no haga nada.

He probado a printar el valor de "respEscogida" si no eliges ninguna opción y también he probado con el operador typeof, y precisamente su valor es "undefined". Cómo puedo comprobar si esa variable está vacía?

Gracias.

Por cierto, acabo de descubrir que no funciona en chrome, no me carga las preguntas :s

kraff2
14/11/2012, 23:04
En principio con

if (typeof respEscogida !== 'undefined')

debería ser suficiente, pero sin ver el html de la página no lo sé seguro.

akualung
14/11/2012, 23:10
Creo que ya lo he arreglado, pero lo he tenido que hacer de una manera bastante "marciana". He invertido la condición del undefined. En vez de mirar si respEscogida es distinto de undefined, miro si es igual (con el triple igual) y, si lo es, devuelvo false y, si no lo es, pues entonces hago todo lo demás.

Ahora el problema siguien siendo lo del chrome, no se qué le debe pasar. Quizá la función getJson de jquery no es compatible o algo así. Tengo la última versión de Chrome, según parece.

Por cierto, ahora lo subo para que se pueda ver todo entero.

Dicho y hecho, aquí está, http://carlosfernandez.260mb.org/javaranch/javaranch.htm

Por cierto, acabo de comprobar que, si pongo esa url en el chrome, también me funciona. Es solo cuando la veo de forma local que no me funciona en el chrome. Es pa volverse loco XDD

otto_xd
14/11/2012, 23:21
!==

Deberia de ser !=

Es mas, si defines primero la variable como undefined y luego la usas, te aseguras que va a tener ese valor.

akualung
14/11/2012, 23:27
!==

Deberia de ser !=

Es mas, si defines primero la variable como undefined y luego la usas, te aseguras que va a tener ese valor.

Ah. Yo es que eso del !== lo ví en una respuesta que le daban a un tío por internet y pensé que, igual que hay un === también habría un !==. De todas maneras, invirtiendo la condición ya me ha funcionado, o sea que, aunque quede feo, mejor lo dejo así. Chapuza coding FTW xDDD

Gracias por la ayuda :brindis:

otto_xd
15/11/2012, 01:16
Ah. Yo es que eso del !== lo ví en una respuesta que le daban a un tío por internet y pensé que, igual que hay un === también habría un !==. De todas maneras, invirtiendo la condición ya me ha funcionado, o sea que, aunque quede feo, mejor lo dejo así. Chapuza coding FTW xDDD

Gracias por la ayuda :brindis:
Pues mira, no conocia que js tenia comparadores de 3 operandos.

Prueba de todas formas con !=, ya que !== comprueba valor y tipo de objeto

akualung
15/11/2012, 01:29
Pues mira, no conocia que js tenia comparadores de 3 operandos.

Prueba de todas formas con !=, ya que !== comprueba valor y tipo de objeto

Bueno, yo tengo entendido que php los tiene y, tal como dije antes, vi a un tío en un ejemplo que puso en un foro así que supongo que, o a ese tío se le "escapó" eso por estar más acostumbrado al php, o realmente existen en javascript. La verdad es que la consola de errores del firefox no se me ha quejado ni con el === ni con el !== (salvo que se me haya pasado comprobar si había algun warning) así que para mí que también lo han implementado en javascript.

romeroca
15/11/2012, 17:24
Javascript hace mucho que implementó esos operadores.

Si queréis saber más miraros esto

http://www.ecmascript.org/

Y otra fuente muy buena es

https://developer.mozilla.org/es/docs/JavaScript

-----Actualizado-----

De todas formas te sugiero que hagas un pequeño cambio para evitar comparar con "undefined" .



$("#done").click( function() {
if ( $("input[name='answers']:checked").length != 0 ) {
var respEscogida = unescape($("input[name='answers']:checked").val());
if (respEscogida == arrayPreguntas[0]['correctAnswer']) {



numAcertadas++;



arrayPreguntas.shift(); //eliminamos la pregunta del array



mostrarPregunta();



} else {



//mostrar respuesta correcta y explicacion



$('#correctAnswer').html("Answer: " + arrayPreguntas[0]['correctAnswer']);




$('#explanation').html(arrayPreguntas[0]['explanation']);



$("#done").hide();




$("#next").show();


}

}
})