Foros del Web » Programando para Internet » Javascript »

Porque no va en Firefox??

Estas en el tema de Porque no va en Firefox?? en el foro de Javascript en Foros del Web. ¿Porque no va este código en Firefox para validar si en un grupo de radio buttons no se ha pulsado ninguna de las opciones? En ...
  #1 (permalink)  
Antiguo 20/11/2006, 04:38
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
Pregunta Porque no va en Firefox??

¿Porque no va este código en Firefox para validar si en un grupo de radio buttons no se ha pulsado ninguna de las opciones? En IE va perfectamente, no lo entiendo.

Código:
 <script type="text/javascript" language="javascript">
	function validar(formulario, i) {
		if (i==2) {
            correcto = false;
            for(j=0;j<formulario.opcion2.length;j++)
            {
                if (formulario.opcion2[i].ckecked == true) {

                    correcto = true;
                }
            }
            if (correcto == false)
                alert("Debes seleccionar una opción de esta encuesta");
            return correcto;
        }
	}
	</script>
Gracias anticipadas
  #2 (permalink)  
Antiguo 20/11/2006, 04:52
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Buenas

¿qué le estás pasando en formulario cuando llamas a la función?

Código:
validar(formulario, i)
  #3 (permalink)  
Antiguo 20/11/2006, 05:22
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
En "formulario" le paso el formulario que se esta validando e "i" es una variable que indica que grupo de opciones es en el k se ha pulsado el boton ya que tengo varios. No se si m explico, si kieres pongo todo el código fuente. A la funcion la llamo asi: onSubmit="return validar(this,<?=$i?>)" donde i es un numero que va cambiando segun el grupo de radio buttons al que pertenece. No se como explicarme mejor. Avisame si kieres que t ponga todo el codigo. Gracias
  #4 (permalink)  
Antiguo 20/11/2006, 06:57
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Esto de onSubmit="return validar(this,<?=$i?>)" está en el tag de form?

En realidad más que dejar el código sería mejor si pudiera probarlo en marcha ¿alguna url donde puedas dejar una demo para probar?
  #5 (permalink)  
Antiguo 20/11/2006, 07:17
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
Puedes probarlo en esta URL: zurdo.freehostia.com/pags/correo.php. No t la puedo poner como enlace debido a los pocos mensajes k hice.

Y perdona por el desorden a la hora de ver el código fuente, en el RAPID PHP al darle a la tecla TAB en vez de meter una tabulación lo que hace es insertar 4 espacios y claro despues sale de esa manera. Lo siento de verdad


Gracias por dedicarme tu tiempo tunait
  #6 (permalink)  
Antiguo 20/11/2006, 07:21
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
No hay de qué

oye, pero no veo el código que mencionas en esa página
  #7 (permalink)  
Antiguo 20/11/2006, 13:59
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
N fin, parezco tonto!! Tengo otro tema pendiente en el foro y ya no sabia que pagina era la de este tema. Perdoname!! La URL (creo que de esta vez correcta) es: zurdo.freehostia.com/pags/encuestPrinc2.php . Asi mas o menos tb t enteras de lo k m gustaria que hiciera la pagina. El script de javascript solo lo tengo validado para la primera encuesta de la fila del medio. Gracias de verdad!!
  #8 (permalink)  
Antiguo 21/11/2006, 03:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
Ahora ya no me va ni en Internet Explorer, no se que hice. Ahora seguro que es fallo de codigo y no pecularidad de navegadores. Gracias por vuestro tiempo.
  #9 (permalink)  
Antiguo 21/11/2006, 03:35
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Fíjate una cosa


Código:
for(j=0;j<formulario.opcion2.length;j++)
            {
                if (formulario.opcion2[i].ckecked == true) {

                    correcto = true;
                }
Creas un bucle pero en cada iteración está comprobando el mismo campo formulario.opcion2[i] e i es el parámetro que le envías a la función. En el caso de la encuesta con la que estás probando siempre verifica si está activada la opción de la posición i


Qué es lo que pretendes, que no se envíe la encuesta si no han seleccionado algo?
  #10 (permalink)  
Antiguo 21/11/2006, 03:44
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
Si ya, de ese error ya me di cuenta lo que pasa es que sigue sin funcionar. Y si, es lo k m gustaria que hiciera, mas que nada para no tener que comprobar en donde se recibe el formulario si ha seleccionado algo y no tener que enviar el identificador de la encuesta. Salu2
  #11 (permalink)  
Antiguo 21/11/2006, 03:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Solo apuntar algunas formas de simplificar lo que tienes...

if (formulario.opcion2[i].ckecked == true)
equivale a
if (formulario.opcion2[i].ckecked);

Y no es necesario el checkeo, ya que puedes hacer la operación OR con cada pasada del bucle:

correcto = false;
for(j=0;j<formulario.opcion2.length;j++)
correcto = correcto || formulario.opcion2[i].ckecked;

Creo que esa es la intención: con un elemento marcado se quede correcto a true y de lo contrario false...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #12 (permalink)  
Antiguo 21/11/2006, 03:49
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
A ver, prueba así

Código:
<script type="text/javascript" language="javascript">
	function validar(formulario) {
            for(j=0;j<formulario.opcion2.length;j++)
            {
                if (formulario.opcion2[j].ckecked == true) {

                    return true;
                }
            }
            return false;
	}
	</script>
y a los formularios les pones onsubmit="return validar(this)"

mira a ver si te va bien eso

Última edición por tunait; 21/11/2006 a las 04:14 Razón: corregir horror sintáctico en el código
  #13 (permalink)  
Antiguo 21/11/2006, 03:51
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hey Pepe, no estaba tu mensaje cuando comencé a escribir
  #14 (permalink)  
Antiguo 21/11/2006, 04:08
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
No funciona tunait, estoy desesperado!! Ahora envía siempre, haga lo que haga. Caricatos gracias por ayudarme a simplificar aunque la segunda opcion no la entiendo y la primera la tenia visto ya en C o en C#. Salu2 a los 2, os estais haciendo fijos en los problemas k tengo, gracias.
  #15 (permalink)  
Antiguo 21/11/2006, 04:12
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Ouch, qué béstia soy, me dejé un error sintáctico como una casa

prueba ahora

Código:
<script type="text/javascript" language="javascript">
	function validar(formulario) {
            for(j=0;j<formulario.opcion2.length;j++)
            {
                if (formulario.opcion2[j].ckecked == true) {

                    return true;
                }
            }
            return false;
	}
	</script>
  #16 (permalink)  
Antiguo 21/11/2006, 04:19
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
Iniciado por tunait Ver Mensaje
Hey Pepe, no estaba tu mensaje cuando comencé a escribir
Si, la verdad es que solo puse una forma de simplificar... cuestión de sintaxis, pero no me había percatado del índice del bucle...

Voy a mostrar como se podría simplificar todo:

Código:
function validar(formulario) {
	var correcto = false;
	for(j = 0; j < formulario.opcion2.length; j ++)
		correcto = correcto || formulario.opcion2[j].ckecked;
	if (!correcto)
		alert("Debes seleccionar una opción de esta encuesta");
	return correcto;
}
Y resalto la forma de validar los formularios:
Cita:
Iniciado por tunait Ver Mensaje
y a los formularios les pones onsubmit="return validar(this)"
Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #17 (permalink)  
Antiguo 21/11/2006, 04:31
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Cita:
Iniciado por lioned69 Ver Mensaje
No funciona tunait, estoy desesperado!! Ahora envía siempre, haga lo que haga. Caricatos gracias por ayudarme a simplificar aunque la segunda opcion no la entiendo y la primera la tenia visto ya en C o en C#. Salu2 a los 2, os estais haciendo fijos en los problemas k tengo, gracias.
Te explico la segunda simplificación:

la variable correcto se inicializa a false, y en cada paso del bucle se actualiza haciendo O lógico del valor actual y el estado del check correspondiente al índice de ese bucle...

O sea, haciendo la operación lógica OR entre false (valor inicial) y el estado del primer check y es false... sigue el valor de la variable a false, pero en cuanto encuentre un valor true se queda en true... la tabla de la verdad de la operación lógica OR es:
false OR false = false;
true OR (cualquier cosa) = true...

Entonces con un chequed encontrado se queda true...

Nueno, no sé si aclaré algo o lié más el asunto... pero sin duda el código vale y está algo simplificado.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #18 (permalink)  
Antiguo 21/11/2006, 08:28
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
tunait cual es ese error sintáctico tan grande? porque yo veo el codigo exactamente igual, a lo mejor es k no m doy cuenta. Y gracias por la explicacion caricatos lo has explicado perfectamente.
  #19 (permalink)  
Antiguo 21/11/2006, 08:32
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Se quedó un = entre return y true

return = true;

el igual ahí es incorrecto
  #20 (permalink)  
Antiguo 22/11/2006, 02:35
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
Ola!! Yo no veo tal fallo pero weno, el caso es k probe el ultimo codigo que pusiste y sigue sin ir. No se si hice algo mal, si necesitas probarlo puedes hacerlo en la url de antes.
  #21 (permalink)  
Antiguo 22/11/2006, 04:15
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Bueno, las modificaciones que hice fueron hechas directamente aquí y no me percaté que la propiedad checked estaba mal escrita

if (formulario.opcion2[i].ckecked == true) {

y así se ha quedado a lo largo del tema.

Por otro lado la función verifica los campos de nombre opcion2 pero estás verificando un formulario en donde los campos se llaman opcion4. Obviamente no encuentra el campo que le indicas.

Si cada form va a tener los radio con nombres distintos hay que enviar el dato y hacer algunos cambios a la forma de referenciar esos campos.

Te dejo un ejemplo que sí funciona

Código:
<script type="text/javascript" language="javascript">
	function validar(formulario, num) {
            for(j=0;j<formulario.elements['opcion' + num].length;j++)
            {
                if (formulario.elements['opcion' + num][j].checked == true) {
                    return true;
                }
            }
			alert('Debes escoger una opción')
            return false;
	}
	</script>
Código:
<form name="form" method="post" action="pon la accion aqui" onsubmit="return validar(this,4)">
<input name="opcion4" value="A" type="radio">
  Alonso <br />
  <input name="opcion4" value="B" type="radio">
  Raikkonen<br />
  <input name="opcion4" value="C" type="radio">
  Fisichella<br />
  <input name="opcion4" value="D" type="radio">&nbsp;Button<br><input name="opcion4" value="E" type="radio">
  &nbsp;Massa 
  <input type="submit" name="Submit" value="Enviar" />
</form>
un saludo
  #22 (permalink)  
Antiguo 22/11/2006, 07:05
 
Fecha de Ingreso: agosto-2006
Mensajes: 40
Antigüedad: 17 años, 9 meses
Puntos: 0
Gracias tunait no se como agradecertelo!! Ya no sabia k hacer para hacerlo funcionar!! Muxas gracias de verdad.
  #23 (permalink)  
Antiguo 22/11/2006, 07:13
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
No hay de qué, me alegra que lo solucionaras finalmente

Un saludo
  #24 (permalink)  
Antiguo 22/11/2006, 09:11
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Yo tampoco me había dado cuenta, y es evidente que usé el viejo truco del copy & paste en mis respuestas porque también están mal... lo curioso es que me fijé en la página con firefox con la clara idea de encontrar un error, pero al no enviar el formulario no salió nada...

Lo importante es que ya está el tema resuelto.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
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 15:45.