Foros del Web » Programando para Internet » Javascript »

validar varios radios

Estas en el tema de validar varios radios en el foro de Javascript en Foros del Web. saben tengo que hacer una búsqueda avanzada pero no me quiere salir... aqui esta el codigo completo para que no se enrreden ... Código: <html> ...
  #1 (permalink)  
Antiguo 08/11/2009, 00:13
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Exclamación validar varios radios

saben tengo que hacer una búsqueda avanzada pero no me quiere salir...
aqui esta el codigo completo para que no se enrreden ...

Código:
<html>
<script language="JavaScript">
fuction Valida()
{
	switch(form2.se)
	{
		case 0:
			alert("seleccione alguna opcion");
			return false;
			break;
		case 1:
			if(form2.stip.value == 0)
				{
					alert("debe seleccionar alguna opciond ela lista");	
					document.form2.stip.focus();
					return false;
				}
			break;
		case 2:
			if(form2.smarc.value == 0)
				{
					alert("debe seleccionar alguna opciond ela lista");	
					document.form2.smarc.focus();
					return false;
				}
			break;
		case 3:
			if(form2.smodel.value.length == 0)
				{
					alert("debe seleccionar alguna opciond ela lista");	
					document.form2.smodel.focus();
					return false;
				}
			break;
		cese 4:
			if(form2.de.value.length == 0 || form2.hasta.value.length == 0)
				{
					alert("debe seleccionar alguna opciond ela lista");	
					document.form2.de.focus();
					return false;
				}
			break;
		case 5:
			 if(form2.sdist.value == 0)
				{
					alert("debe seleccionar alguna opciond ela lista");	
					document.form2.sdist.focus();
					return false;
				}
			 break;
	}
	return true;
}
</script>



<body bgcolor="black">
<center>
<img src="images/avanzada.jpg"
<font color="white">
        <form action="Busqueda/avanzada2.php" method="post" id="form2" name="form2" onsubmit="return Valida(this)">
                <input type="radio" name="se" value="1">&nbsp;
                Tipo<select name="stip">
                        <option value="0">_-seleccione tipo-_</option>
                        <option value="notebooks">notebooks</option>
                </select><br><br>
                <input type="radio" name="se" value="2">&nbsp;
                Marca<select name="smarc">
                        <option value="0">_-seleccione marca-_</option>
                        <option value="compaq">Compaq</option>
                        <option value="hp">Hp</option>
                        <option value="packard bell">Packard bell</option>
                        <option value="vaio">Vaio</option>
                </select><br><br>
                <input type="radio" name="se" value="3">&nbsp;
                Modelo <input type="text" name="smodel"><br><br>
                <input type="radio" name="se" value="4">
                Rango precio De:<input type="text" name="de"><br>
		Hasta:<input type="text" name="hasta"><br><br>
                <input type="radio" name="se" value="5">&nbsp;
                Distribucion<select name="sdist">
                        <option value="0">_-seleccione distribucion-_</option>
                        <option value="debian">Debian</option>
                        <option value="fedora">Fedora</option>
               </select><br><br>
                <input type="submit" name="submit">
</font>
</center>
</form>
</body>
</html>
quisas seria mejor usar "if" que dicen ustedes??
  #2 (permalink)  
Antiguo 08/11/2009, 01:45
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: validar varios radios

Hola:

Tienes cosas que no entiendo, sipones:

Código:
onsubmit="return Valida(this)"
deberías poner luego:

Código:
fuction Valida(form2)
Tal xomo lo tienes tal vez funcione en explorer, pero no vale en otros navegadores.

También el switch, porque debes consultar el value, y no olvides que se trata de texto:

Código:
switch(form2.se.value) {
case "0":
Revisa esas cosillas y nos cuentas.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 08/11/2009, 01:51
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

ademas de lo comentado por caricatos, tienes un error de logica pero antes debes comprender un concepto. cuando mas de un elemento comparte el mismo valor en el atributo name, el DOM devuelve una coleccion de elementos. en dicho caso, la coleccion esta compuesta de todos los elementos que contiene el mismo valor. pero, cuando solo existe un elemento con dicho nombre, el DOM devuelve la referencia de este elemento. la diferencia radica en que una coleccion se maneja como un array mientras que un simple elemento es como un objeto.

aplicado a tu caso, los cinco radios tienen el mismo nombre de modo que form2.se es una coleccion. el error de algoritmo que tienes es que le estas pasando la coleccion a switch en lugar del valor que repesenta el radio seleccionado. antes de pasar el valor tienes que determinar cual de los radios esta activado. para determinarlo, recorres la coleccion con un bucle e identifica el radio seleccionado por su propiedad checked. por ejemplo,
Código:
// asumiendo que radios es la coleccion;
for(var index = 0; radios[index]; index++)if(radios[index].checked)break;
switch(radios[index].value){
...
}
lo que resulta de este ejemplo es que la variable de iteracion (index) corresponde a la posicion de la coleccion del elemento seleccionado por el usuario. luego en switch le pasas el valor de la propiedad value del elemento seleccionado.

pero no todo termina ahi. ahora considera el valor que tiene cada radio, pues no encajan correctamente con la estructura de los cases. por ejemplo, el primer radio tiene como valor cero (0) y en el switch, case 0 indica un mensaje que no corresponde a este radio.


@caricatos,
¡¡rayos!! me tomo mucho escribir lo que en pocas palabras tu escribistes. me vas a tener que enseñar redaccion eficaz y simple... creo que es porque me envuelvo mucho en los detalles.


edit @ 2:59,
otro error que tienes es de bajo nivel, o sea la sintaxis. en especifico, has escrito mal la declaracion function y case.
Código:
fuction Valida()
{
...
		cese 4:
...
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 08/11/2009 a las 01:59 Razón: mas detalles...
  #4 (permalink)  
Antiguo 08/11/2009, 09:39
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

lo edite para que solo mande un mensaje para cuando se selecciona algo y después poder avanzar segun eso...
miren hice los arreglos que me dijeron... pero sige sin mandar nada :S

Código:
<script language="JavaScript">
function Valida(form1)
{
        for(var index=0;form2.me[index];index++)
        if(form2.se[index].checked)
        break;
        switch(form2.se[index].value)
        {
                case 0:
                        alert ("seleccione alguna opcion")
                        return false;
                        break;
                case 1:
                        alert ("seleccion 1")
                        return false;
                        break;
                case 2:
                        alert ("seleccion 2")
                        return false;
                        break;
                case 3:
                        alert ("seleccion 3")
                        return false;
                        break;
                case 4:
                        alert ("seleccion 4")
                        return false;
                        break;
                case 5:
                        alert ("seleccion 5")
                        return false;
                        break;
        }
        return true;
}
</script>
disculpen por las molestias pero no llevo mucho en javaScript y me pierdo un poco...
  #5 (permalink)  
Antiguo 08/11/2009, 10:31
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

veras, en tu codigo, ¿donde usas form1?
Código:
function Valida(form1)
ese argumento debio llamarse form2. o si prefieres form1, entonces en el cuerpo de la funcion tienes que cambiar todos los form2 por form1.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 08/11/2009, 10:57
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

si me equivoque hay pero igual no funciona :S
  #7 (permalink)  
Antiguo 08/11/2009, 11:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

Código:
for(var index=0;form2.me[index];index++)
a ver si le encuentras algo raro...
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 08/11/2009, 11:13
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

Código:
for(var index=0;form2.se[index];index++)
puse eso... pero no pasa nada T.T
  #9 (permalink)  
Antiguo 08/11/2009, 11:24
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

cito algunas lineas como recordatorio...
Cita:
Iniciado por caricatos Ver Mensaje
También el switch, porque debes consultar el value, y no olvides que se trata de texto:

Código:
switch(form2.se.value) {
case "0":
Cita:
Iniciado por zerokilled Ver Mensaje
pero no todo termina ahi. ahora considera el valor que tiene cada radio, pues no encajan correctamente con la estructura de los cases. por ejemplo, el primer radio tiene como valor cero (0) y en el switch, case 0 indica un mensaje que no corresponde a este radio.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 08/11/2009, 13:46
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

hay me salio !!! muchas gracias por todo


una ultima pregunta :P en el switch se puede usar default??

bueno eso seria... gracias
  #11 (permalink)  
Antiguo 08/11/2009, 13:47
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

hay ta el codigo...
Código:
<script language="JavaScript">
function Valida(form2)
{
        for(var index=0;form2.se[index];index++)
        if(form2.se[index].checked)
        break;
        switch(form2.se[index].value)
        {
                case "0":
                        alert ("seleccione alguna opcion")
                        return false;
                        break;
                case "1":
                        alert ("seleccion 1")
                        return false;
                        break;
                case "2":
                        alert ("seleccion 2")
                        return false;
                        break;
                case "3":
                        alert ("seleccion 3")
                        return false;
                        break;
                case "4":
                        alert ("seleccion 4")
                        return false;
                        break;
                case "5":
                        alert ("seleccion 5")
                        return false;
                        break;
		default:
			alert("seleccione algo")
			return false;
			break;
        }
        return true;
}
</script>
  #12 (permalink)  
Antiguo 08/11/2009, 13:51
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

es correcto, se puede usar default.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #13 (permalink)  
Antiguo 08/11/2009, 13:53
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

de la misma forma en que lo use en el codigo??
  #14 (permalink)  
Antiguo 08/11/2009, 13:55
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

es correcto, si miras el enlace hay dos ejemplos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 08/11/2009, 14:26
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

supongo que ya se a que viene la pregunta. tu esperas que al no selecionar algun radio, el switch vaya al caso predeterminado, o sea, default. tiene sentido y logica pero aun asi no funciona. la razon, al no haber un radio seleccionado la variable de iteracion (index) del bucle for termina apuntando a un indice que no existe en la coleccion.

aplicado a tu caso, cuando no hay radio seleccionado, index contiene el valor cinco (5), de modo que form2.se[5] devuelve undefined porque no existe dicha posicion. recuerda, los indices de los arrays, al igual que las colecciones de elementos, comienzan desde cero (0) siendo este el primer elemento. al form2.se[5] equivaler undefined, form2.se[5].value genera error porque no existe la propiedad value en undefined, e interrumpe la ejecuccion del script.

para corregirlo, tienes que verificar si dicho indice existe. si no existe significa que no se ha seleccionado un radio, y aqui entonces lanzas el mensaje de default.
Código:
// esto va entre el bucle for y switch;
if(!form2.se[index]){
alert("seleccione algo");
return false;
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #16 (permalink)  
Antiguo 08/11/2009, 15:50
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

sin eliminar el otro if ya ingresado anteriormente me refiero a este

Código:
if(form2.se[index].checked)
	break;
  #17 (permalink)  
Antiguo 08/11/2009, 15:55
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: validar varios radios

es correcto, sin eliminar ese if. o sea, mas bien el codigo va justo antes de switch.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #18 (permalink)  
Antiguo 08/11/2009, 16:06
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: validar varios radios

Te voy a poenr un codigo a ver si te vale:

Código HTML:
<SCRIPT LANGUAGE="JAVASCRIPT">
function valuechecked(radio) {
   for (i=0; i<radio.length; i++) {
      if (radio[i].checked) {
         return radio[i].value;
      }
   }
}
function recoger(){
	var tvit = parseInt(valuechecked(form.vvitoria));

}
</SCRIPT> 
Con la primera funcion recorres todos los input radio y con la segunda vas recogiendo el varlor del input concreto, en este caso "vvit"
  #19 (permalink)  
Antiguo 08/11/2009, 16:10
 
Fecha de Ingreso: noviembre-2009
Mensajes: 11
Antigüedad: 15 años
Puntos: 0
Respuesta: validar varios radios

muchas gracias zerokilled , me ayudaste mucho....

bueno dejo el codigo terminado con todas las validaciones que le hice acá


Código:
<html>
<script language="JavaScript">
function Valida(form2)
{
//ve si existe un index
	for(var index=0;form2.se[index];index++)
	if(form2.se[index].checked)
	break;
//ve si hay algo seleccionado
	if(!form2.se[index])
	{
		alert("seleccione alguna opcion");
		return false;
	}
//comienza el switch
        switch(form2.se[index].value)
        {
//aqui vemos si hay algo seleccionado en el list
                case "1":
                        if(form2.stip.value == "0")
				{
					alert("elija alguna opcion")
					return false;
					break;
				}
			else
			break
                case "2":
                        if(form2.smarc.value == "0")
				{
					alert("elija alguna opcion")
					return false;
					break;
				}
			else
			break
//aqui vemos si el text esta vacio
                case "3":
                        if(form2.smodel.value.length == 0)
				{
					alert("escriba algo")
					return false;
					break;
				}
			else
			break
//aqui vemos si dos text estan vacios(se supone que son un rango 'de' 'hasta') 
                case "4":
                        if(form2.de.value.length == 0 || form2.hasta.value.length == 0)
				{
					alert("debe llenar los 2 precios")
					return false;
					break;
				}
//si uno es mayor al otro
			if(form2.de.value.length > form2.hasta.value.length)
				{
					alert("el precio 'de' debe ser menos que 'hasta'")
					return false;
					break;
				}
//si es numero
			if(isNaN(form2.de.value) || isNaN(form2.hasta.value))
			{
				alert("Debe ingresar solo numeros")
				return false;
				break
			}

			else
			break;

                case "5":
                        if(form2.sdist.value == "0")
				{
					alert("elija alguna opcion")
					return false;
					break;
				}
			else
			break

		default:
			alert("seleccione algoa")
			return false;
			break;
        	}
		return true;
}
</script>

gracias...
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:41.