Foros del Web » Programando para Internet » Javascript »

Verificar radios

Estas en el tema de Verificar radios en el foro de Javascript en Foros del Web. Bueno, no sé si es porque es lunes o porque yá estoy senil pero no logro que me salga una cosa que creo yo que ...
  #1 (permalink)  
Antiguo 07/06/2004, 03:24
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Verificar radios

Bueno, no sé si es porque es lunes o porque yá estoy senil pero no logro que me salga una cosa que creo yo que es más simple que el mecanismo de un botijo

Tengo un formulario con chorrocientos campos de tipo radio. En realidad son chorrocientas preguntas con con 3 posibles respuestas: si, no, ni puta idea.

ok, necesito comprobar que todas las preguntas tengan un radio checkao.

Los campos no tienen id y no me da la gana de pasarme dos horas agregando idés a esos radios, bastante que les puse un name, además tiene que poder hacerse con su name o con su posición.

Bien, llevo dos horas dándole vueltas (buen va, una hora, pero yá me harté) y no hay forma de que me reconozca los objetos.

Bucle de x vueltas. Tantas vueltas como preguntas.

los campos se llaman p y un número (p1, p2, p3...)

si le digo alert(document.forms[0].p5.length) me devuelve 3 (correcto)

pero si lo quiero hacer con un for y le pido

alert(eval('document.forms[0].p' + variable + '.length')) me devuelve undefined. De hecho, me devuelve undefined le pida lo que le pida.

cómo &%$&/%leches logro que lo reconzca? nunca hasta hoy me había fallado el eval.

insisto, no me da la gana de ponerle id a los campos, es una cuestión personal.

Mal comenzamos el lunes :-p

Ala, hoy os pongo yo a trabajar (al que quierea echarme un cable, claro)

se aceptan sugerencias
  #2 (permalink)  
Antiguo 07/06/2004, 03:59
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
... espera que creo que yá lo tengo agarrao de los cuernos....
  #3 (permalink)  
Antiguo 07/06/2004, 04:32
 
Fecha de Ingreso: mayo-2004
Mensajes: 75
Antigüedad: 20 años, 6 meses
Puntos: 2
por si acaso se te ha escapao a pesar de tenerlo agarrao por los cuernos:

¿a que valor inicias la variable con que recorres las preguntas?, ten cuidado que si la inicializas a 0 que la primera pregunta sea p0, sino inicializala a 1 y que sea p1.
  #4 (permalink)  
Antiguo 07/06/2004, 04:40
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Hola sonia,

de entrada siempre la inicializo a 0 pero en seguida me daba cuenta y la cambiaba a 1. A 0 me habría devuelto un p0 no está definido.

Al final salió con el eval, no entiendo por qué las primeras 20 vueltas que le dí me devolvía undefined siempre, tal vez al ser lunes por la mañana la neurona la tenía a medio gas y pasé por todas las opciones malas pasando muy de cerca por la buena.

Finalmente quedó así

for(t=1; t<=42;t++){
if(eval('document.forms[0].p' + t + '[0].checked') || eval('document.forms[0].p' + t + '[1].checked') || eval('document.forms[0].p' + t + '[2].checked')){
continue
}
else{alert('debe seleccionar una opción en todas las preguntas');break}
}

Yá me extrañaba, con eval nunca tuve problemas para evaluar sentencias...

Gracias por leer mi problemo y tu sugerencia

Un saludo
  #5 (permalink)  
Antiguo 07/06/2004, 04:47
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Porque eres nueva en los foros te lo disculpo, tunait, pero has de saber que hay un magnífico buscador en los mismos. Tu problema se ha resuelto varias veces. Si visitas este enlace verás una respuesta a algo parecida dada por mí hace poco.

Me alegro de uqe lo resolvieses!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #6 (permalink)  
Antiguo 07/06/2004, 04:57
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
em... vale que sea nueva, vale que el buscador furula muy bien, pero de todas formas no me hubiera servido ese post, no veo que se parezca en nada a lo que necesito (o necesitaba)

El tema era lograr que me reconociera como objetos los radio usando la variable para referenciarlos.
  #7 (permalink)  
Antiguo 07/06/2004, 05:10
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Trialorololoo...

Hombre... sí que te serviría... fijate en esta parte del código que propuse:
Código HTML:
	for(q=0;q<formulario.length;q++){
			
			//Si el elemento es un radio y tiene nuevo nombre (es una nueva ristra de preguntas)
			if(formulario.elements[q].type=="radio" && formulario.elements[q].name!=nombre){
			//Contar una pregunta más
			preguntas+=1;
			//Cambiar el valor de nombre anterior por el actual
			 nombre=formulario.elements[q].name;
			 }
			 
			 //Si está seleccionada esta respuesta
			  if(formulario.elements[q].checked){
				//Sumar una a la letra en cuestión
				eval(formulario.elements[q].value+"+=1");
				//Sumar una al total de respuestas
				total+=1;
				}
			
}
	//Si no se han contestado todas
	if(responderTodas && total!=preguntas){alert("Debe responder a todas las preguntas antes de continuar");return false}
Se podría modificar para que avisara con la respuesta no contestada... así:

Código HTML:
	for(q=0;q<formulario.length;q++){
			
			//Si el elemento es un radio y tiene nuevo nombre (es una nueva ristra de preguntas)
			if(formulario.elements[q].type=="radio" && formulario.elements[q].name!=nombre){
			//Contar una pregunta más
if(preguntas!=total){alert("haga el favor de responder a la pregunta "+preguntas);break}

			preguntas+=1;
			//Cambiar el valor de nombre anterior por el actual
			 nombre=formulario.elements[q].name;
			 }
			 
			 //Si está seleccionada esta respuesta
			  if(formulario.elements[q].checked){
				//Sumar una a la letra en cuestión
				eval(formulario.elements[q].value+"+=1");
				//Sumar una al total de respuestas
				total+=1;
				}
			
}
En cualquier caso tu respuesta es mucho más sencilla... Mi respuesta ha sido, más que nada por saludarte y por hacer que alguien pagara el que hoy sea lunes... :-p

Un besote, leporcia!!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #8 (permalink)  
Antiguo 07/06/2004, 05:19
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Verás, es que el formulario tiene otros campos de tipo text que también se verifican, algunos son obligados, otros no.

La función estaba prácticamente al completo pero no salía nada intentando acceder a los objetos con eval, y no me daba la gana de alterar todo el sistema tal como lo tenía porqe al señor no le daba la gana de entenderlo.

La suma de radios seleccionados es una forma de hacerlo también, pero es que no era el caso. Era una cuestión personal, como comenté (también podía haberles dado un id que con getElementById se habría hecho en un plisplas, pero es que no quiero hacer las cosas como a "el" el dé la gana, si no como me de la gana a mi (puñetera que soy)

Es decir, aunque hubiera encontrado otra solución, hubiera planteado igual la pregunta. Finalmente era una cuestión de sintaxis y de mi neurona (la tengo castigada por inepta, así que ahora escribo con la neurona que rige mis funciones vitales (respiración, etc.))

otra cosa,

if(formulario.elements[q].type=="radio" && formulario.elements[q].name!=nombre){

¿oño es nombre??

Última edición por tunait; 07/06/2004 a las 05:21
  #9 (permalink)  
Antiguo 07/06/2004, 05:28
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
En un momento inicial del script (no puesto aquí por falta de revisión) nombre es:

var nombre;

Y ya en el for:
if(formulario.elements[q].type=="radio" && formulario.elements[q].name!=nombre){

preguntas+=1;
//Cambiar el valor de nombre anterior por el actual
nombre=formulario.elements[q].name;
}

Entiendo que la respuesta tendría que haber sido con eval, no?

Jopetas, pero mi código tb funcionaba en lo que preguntabas inicialmente (aunque no fuera con evals)... ¿o no? ¿Tengo falta de lectura comprensiva?
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.

Última edición por KarlanKas; 07/06/2004 a las 05:29
  #10 (permalink)  
Antiguo 07/06/2004, 05:39
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
jajaja claro que funciona, es otra forma de hacerlo también.

Pero el caso es que mi idea es detener el script en el momento en que el primer grupo de radios estuviera sin seleccionar y acceder a ellos evaluando la sentencia con la variable. Me negaba en redondo a cambiar de método porque tenía que poder hacerse con mi idea original.


He llegado alguna vez a pasar 4 horas programando para ahorrame el teclear algo que me hubiera llevado 10 minutos, es una cuestión de principios. Si se puede hacer más breve y que consuma menos recursos y sé que se puede, quiero hacerlo así y si no va, quiero saber por qué no va y que la razón sea que no es posible. Pero mientras sea posible, me seguiré dando de cabezazos en el mismo muro hasta encontrar la forma de que lo entienda. Supongo que así es como he ido aprendiendo este tiempo ....
  #11 (permalink)  
Antiguo 07/06/2004, 06:04
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 22 años, 11 meses
Puntos: 61
Pues nada nada... yo he seguido y me ha salido este engendro. Que servirá para ocupar un espacio en la base de datos de los foros y poco más:
Código HTML:
<html>
<head>
<script>

function comprobar(){
var nombre;
var preguntas=0;
var total=0;
formulario=document.forms[0].elements;
for(q=0;q<formulario.length;q++){
			
			//Si el elemento es un radio y tiene nuevo nombre (es una nueva ristra de preguntas)
			if(formulario.elements[q].type=="radio" && formulario.elements[q].name!=nombre){
			//Contar una pregunta más
		
				if(preguntas!=total){alert(" - haga el favor de responder a la pregunta "+preguntas);return false}

			preguntas+=1;
			//Cambiar el valor de nombre anterior por el actual
			 nombre=formulario.elements[q].name;
			 }
			 
			 //Si está seleccionada esta respuesta
			  if(formulario.elements[q].checked){
			//Sumar una al total de respuestas
				total+=1;

				}
			
}
if(preguntas!=total){alert(" - haga el favor de responder a la pregunta "+preguntas);return false}
}
</script>
	<title>Untitled</title>
</head>

<body>
<form>
<input type="radio" name="pepe" value="1">u<br>
<input type="radio" name="pepe" value="2">u<br>
<input type="radio" name="pepe" value="3">u<br><br>
<input type="radio" name="pepe1" value="1">u<br>
<input type="radio" name="pepe1" value="2">u<br>
<input type="radio" name="pepe1" value="3">u<br><br>
<input type="radio" name="pepe2" value="1">u<br>
<input type="radio" name="pepe2" value="2">u<br>
<input type="radio" name="pepe2" value="3">u<br><br>
<input type="radio" name="pepe3" value="1">u<br>
<input type="radio" name="pepe3" value="2">u<br>
<input type="radio" name="pepe3" value="3">u<br><br>
<input type="radio" name="pepe4" value="1">u<br>
<input type="radio" name="pepe4" value="2">u<br>
<input type="radio" name="pepe4" value="3">u<br><br>

<input type="button" value="Comprobar" onClick="comprobar()">
</form>

</body>
</html> 
Un saludo!!!
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
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 18:47.