Foros del Web » Programando para Internet » Javascript »

Validar form con radiobutton

Estas en el tema de Validar form con radiobutton en el foro de Javascript en Foros del Web. ¿Cómo valido un formulario en el que hay que elegir al menos uno de varios radiobuttons, todos con el mismo name y distinto value?...
  #1 (permalink)  
Antiguo 23/03/2005, 03:55
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Validar form con radiobutton

¿Cómo valido un formulario en el que hay que elegir al menos uno de varios radiobuttons, todos con el mismo name y distinto value?
  #2 (permalink)  
Antiguo 23/03/2005, 04:00
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
... otro?? agrega "selected" a uno.. el que quieras por defecto. Los radio buttons tienen el comportamiento de que SOLO SE PUEDE SELECCIONAR UNO Y AL MENOS UNO de un grupo... agrupados por el name obviamente... entonces, si tu seleccionas uno... no habrá manera de desmarcarlo.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 23/03/2005, 04:16
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 1 mes
Puntos: 2
En el caso de que no quieras tener uno seleccionado por defecto, puedes validar por ejemplo asi:

Código:
function validar() {
	var sel = false;
	for(var i=0; i<3; i++) {
		if (thisForm.rd1[i].checked) {
			sel = true;
			break;
		}
	}
	if (sel == false) {
		alert("debe seleccionar una opcion");
	}
}
Te lo he puesto para un numero fijo de radios, en este caso 3 y considerando que los controles estan incluidos en un formulario de nombre thisForm.

Un saludo
Txarly
__________________
¿Por qué Uri Geller doblaba cucharas?
  #4 (permalink)  
Antiguo 23/03/2005, 04:48
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Txarly, he podido hacer funcionar tu script, y me sale el alert, pero al darle a aceptar la ejecución del form no se detiene, sino que va a la página señalada en el action.

He puesto en el form onsubmit="validar()"

¿Cómo lo hago para que se detenga y no vaya a la página de destino?

Gracias.
  #5 (permalink)  
Antiguo 23/03/2005, 04:51
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Por cierto, dado que tengo 10 opciones para escoger, sería

for(var i=0; i<9; i++)

¿no?
  #6 (permalink)  
Antiguo 23/03/2005, 04:55
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola mrgubu

Tienes que poner el formulario así:

onsubmit="return validar()"

y cambiar un poco el código de la función:

if (sel == false) {
alert("debe seleccionar una opcion");
return false;
}

Espero que te funcione. Saludos,
  #7 (permalink)  
Antiguo 23/03/2005, 04:56
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 1 mes
Puntos: 2
Para que no te vaya a la siguiente pagina en vez de un input de type submit utiliza un input de type="button", entonces el submit lo hacemos en la función de Javascript que quedaria así:

Código:
function validar() {
	var sel = false;
	for(var i=0; i<3; i++) {
		if (thisForm.rd1[i].checked) {
			sel = true;
			break;
		}
	}
	if (sel == false) {
		alert("debe seleccionar una opcion");
	} else {
                          thisForm.submit();
             }
}
Si tienes 10 radios los indices van de 0 a 9 por lo tanto seria:
for(var i=0; i<10; i++)
ó
for(var i=0; i<=9; i++)

PD: acabo de ver la respuesta de JavierB y me parece más eficaz , hazlo como te dice.
__________________
¿Por qué Uri Geller doblaba cucharas?

Última edición por txarly; 23/03/2005 a las 04:57
  #8 (permalink)  
Antiguo 23/03/2005, 06:00
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
ok, perfecto. Muchas gracias a todos.
  #9 (permalink)  
Antiguo 23/03/2005, 11:49
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Una pregunta más: ¿Cómo continúo la función para que, después de haber obligado a elegir un radiobutton, muestre un mensaje de confirmación (aceptar/cancelar) para seguir?
  #10 (permalink)  
Antiguo 23/03/2005, 12:45
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Ya he solucionado lo del confirm.

Pero tengo otro problema: el script falla si hay un sólo radiobutton::

Como el script lo armo dinámicamente con asp, el numero de radiobuttons varía: si el número de radiobuttons es 1, el script no funciona: es decir, con for(var i=0; i<1; i++), el script no va, y necesito que funcione también en ese caso.
  #11 (permalink)  
Antiguo 26/03/2005, 13:45
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola mrgubu

Lo que ocurre es que cuando tienes un solo radio no se crea ningún array de radios, por eso cuando pones rd1[0] da un error. Esto puede servirte:
Código PHP:
function validar() {
  var 
sel=false;
    if(
thisForm.rd1.length==undefined) {
    if(
thisForm.rd1.checked)
      
sel=true;
  }
  else
  
    for(var 
i=0i<3i++) {
        if (
thisForm.rd1[i].checked) {
            
sel true;
            break;
        }
    }
  
    if (
sel == false) {
        
alert("debe seleccionar una opcion");
    } else {
    
thisForm.submit();
  }

Saludos,
  #12 (permalink)  
Antiguo 26/03/2005, 18:02
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
JavierB, lo he probado, pero no funciona, quiero decir que sigue fallando cuando el form tiene un solo radiobutton. El script no me da error, simplemente no se detiene y pasa a la página de destino.

Como yo defino previamente en asp el número de raddiobuttons, quizás se podría hacer un bucle en el que cuando numeroderegistros = 1 pues se validara de una manera y si no de otra.
  #13 (permalink)  
Antiguo 27/03/2005, 05:03
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
¡Que raro! Acabo de probarlo otra vez y me ha funcionado bien. Si solo hay un radiobutton y no está marcado salta el mensaje de alerta y no se envía el formulario.

Saludos,
  #14 (permalink)  
Antiguo 27/03/2005, 10:41
Avatar de mrgubu  
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 2 meses
Puntos: 2
Aaaaaaaaahora sí que va. Debí hacer algo mal cuando lo probé inicialmente.
Gracias por tu paciencia, Javier B, y gracias tb a txarli y a los demás por vuestra ayuda.
  #15 (permalink)  
Antiguo 29/11/2005, 06:57
Avatar de Pauten  
Fecha de Ingreso: enero-2005
Ubicación: Santiago, Chile
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
hola, a mi no me funciona con 1 radiobutton, he intentado de todas las formas y no concigo que funcione, si alguien tiene otra solución como la que entregó JavierB se los agradecere.
  #16 (permalink)  
Antiguo 29/11/2005, 09:54
 
Fecha de Ingreso: noviembre-2003
Mensajes: 209
Antigüedad: 20 años, 5 meses
Puntos: 0
No me funciona....X que?

Utilice el codigo que pusieron en las respuestas, pues tengo el mismo problema que mrgubu pero no me funciona!!

Me dice que el objeto al que hago referencia no existe.....

Estos son mis codigos....

De los radio button, son grupos de 4 y empiezan con nombre desde "P1" hasta "P11" (solo puse dos grupos):

Código:
<table width="800" border="1" cellpadding="0" cellspacing="0" bordercolor="eaeaea">
    <tr>
      <td><input name="P1" type="radio" value="1" />
      a) No tengo idea </td>
      <td><input name="P1" type="radio" value="2" />
      b) Se muy poco a el respecto </td>
      <td><input name="P1" type="radio" value="3" />
      c) Se bastante a el respecto </td>
      <td><input name="P1" type="radio" value="4" />      
      d) Conozco a detalle </td>
    </tr>
  </table>
  <br />
  <table width="800" border="0" bgcolor="eaeaea">
    <tr>
      <td><span class="Estilo11">2. Crees que el objetivo del proyecto en que trabajaste o estas trabajando fue/es... </span></td>
    </tr>
  </table>
  <table width="800" border="1" cellpadding="0" cellspacing="0" bordercolor="eaeaea">
    <tr>
      <td><span class="Estilo11">
        <input name="P2" type="radio" value="1" />
      a) De ningun valor para mi funci&oacute;n </span></td>
      <td><span class="Estilo11">
        <input name="P2" type="radio" value="2" />
      b) De cierto valor para mi funci&oacute;n </span></td>
      <td><span class="Estilo11">
        <input name="P2" type="radio" value="3" />
      c) Importante para mi funci&oacute;n </span></td>
      <td><span class="Estilo11">
        <input name="P2" type="radio" value="4" />
      d) Clave para mi funci&oacute;n </span></td>
    </tr>
  </table>
Y con este codigo quiero validarlos, que es el que pusieron como respuesta para mrgubu, solo que lo adapte a mi formulario que se llama "form1":

Código:
<script language="javascript">
function validar() {
if (form1.NumEmp.value=="" ){
alert("Debe de poner su numero de empleado");
return false
}
if (form1.Nombre.value==""){
alert("Debe de poner su Nombre completo");
return false
}
var sel=false;
for(var i=0;i<3;i++){
	if (form1.P[i].checked){
		sel=true;
		break;
		}
	}
	if(sel==false){
		alert("Debe seleccionar una opcion");
		return false
		}
	}
</script>

Pero me dice:
Error: 'form1.P' is null or not an object

Tal parece que no me toma en cuenta el form1.P[i].

Me pueden ayudar?

Gracias
  #17 (permalink)  
Antiguo 29/11/2005, 10:03
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
en vez de form1.P[i] debes poner form1.P1[i]
Código PHP:
<script language="javascript">
function 
validar() {
if (
form1.NumEmp.value=="" ){
alert("Debe de poner su numero de empleado");
return 
false
}
if (
form1.Nombre.value==""){
alert("Debe de poner su Nombre completo");
return 
false
}
var 
sel=false;
for(var 
i=0;i<3;i++){
    if (
form1.P1[i].checked){
        
sel=true;
        break;
        }
    }
    if(
sel==false){
        
alert("Debe seleccionar una opcion");
        return 
false
        
}
    }
</script> 
  #18 (permalink)  
Antiguo 29/11/2005, 10:24
 
Fecha de Ingreso: noviembre-2003
Mensajes: 209
Antigüedad: 20 años, 5 meses
Puntos: 0
Muchas gracias!!!!

Si me faltaba eso..... ya con esto termino el 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 01:54.