Foros del Web » Programando para Internet » Javascript »

Verificación de RadioButtons

Estas en el tema de Verificación de RadioButtons en el foro de Javascript en Foros del Web. Hola: En su día, no me acuerdo de dónde, encontré un código de JavaScript para verificar si en un formulario, al pulsar "Enviar" y antes ...
  #1 (permalink)  
Antiguo 25/04/2006, 04:01
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Verificación de RadioButtons

Hola:

En su día, no me acuerdo de dónde, encontré un código de JavaScript para verificar si en un formulario, al pulsar "Enviar" y antes de mandarlo, había algún botón de RadioButton seleccionado. Si no lo había no mandaba el formulario, sacando un mensaje de alerta.

Este código lo suelo usar en apartado de gestión de las webs que programo, en las secciones dónde se eliminan registros. Es decir, para eliminar un determinado registro de la base de datos, habrá que seleccionar su radiobutton correspondiente del listado presentado.

Todo va bien. Hasta el momento en el que solamente queda un registro. Entonces, por mucho que selecciones el radiobutton te saca el mensaje de que no hay ninguno seleccionado. ¿Por qué?, no lo sé.
Parece que queda obligatorio que hay al menos un registro en el listado, sin poder eliminar totalmente todos.
¿¿Alguien sabría como solucionarlo??

Seguidamente, dejo un ejemplo de la última manera que lo programé:

// SEGÚN EL VALOR DE tarea, SE INCLUIRÁ LA PROMOCIÓN EN VENTAS REALIZADAS Y SE ELIMINARÁ
// Ó SE ELIMINARÁ SOLAMENTE
function valid_ElmProm(tarea) {
// Lista con los radioButton
opcion = adm_elmProm.promo_id;

// Variable que detecta si hay alguno seleccionado
selecc = false // Inicialmente en false
// Se recorren todos los radioButton buscando que haya alguno marcado

x=0;
while (!selecc && (x <opcion.length)) {

if (opcion[x].checked) {
selecc = true;
}
x++;
}

if (!selecc) {
alert ("Seleccionar la promoción a eliminar.");
return false;
}

if (tarea == "insElim") {
ht = document.getElementsByTagName("html");
ht[0].style.filter = "progid:DXImageTransform.Microsoft.BasicImage(gray scale=1)";
if (confirm(':: La promoción seleccionada será eliminada ::\n\n¿Desea que conste en la Lista de Ventas?\n- \'Aceptar\' para continuar.\n- \'Cancelar\', para optar por sólo Eliminar.')){
document.adm_elmProm.action= "adm_elmProm.asp?paraVentas=SI";
document.adm_elmProm.submit();
return true;
} else {
ht[0].style.filter = "";
return false;
}

} else if (tarea == "soloElim") {
ht = document.getElementsByTagName("html");
ht[0].style.filter = "progid:DXImageTransform.Microsoft.BasicImage(gray scale=1)";
if (confirm(':: La promoción seleccionada será eliminada solamente ::\n\n- \'Aceptar\' para continuar.\n- \'Cancelar\', para optar por la opción de incluirla en el\n historial de Ventas.')){
document.adm_elmProm.action= "adm_elmProm.asp";
document.adm_elmProm.submit();
return true;
} else {
ht[0].style.filter = "";
return false;
}
}

}// FIN DE valid_ElmProm(tarea)

A ver si alguien me sugiere algo, porfa´...

Saludos,

zacktagnan.
============================================
  #2 (permalink)  
Antiguo 26/04/2006, 04:07
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
¿Ninguna idea ó sugerencia por pequeña que sea...?


zacktagnan.
================================================== =
  #3 (permalink)  
Antiguo 28/04/2006, 05:57
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Osea que, ¿¿¿¿no tiene solución?????

zacktagnan.
=================================================
  #4 (permalink)  
Antiguo 28/04/2006, 06:34
 
Fecha de Ingreso: abril-2006
Mensajes: 16
Antigüedad: 18 años
Puntos: 0
Hola!

Pues la verdad es que no he leido el cñodigo que has puesto por vago que soy xD, pero aquí te dejo el código que utilizo yo y que espero que te sirva.
Se entiende que aunque aquí ponga PHP es en realidad JavaScript, es que quedaba más mono xD

Un saludo y ya me dirás que tal te fue todo

Código PHP:

function fnBuscaOpt()
{
    
//Si no hay registros no hace nada
    
if (!document.frmResultados.optCodigo)
    {
        return -
1;
    }

    
    
//Si hay un solo elemento js no hace un array
    
if (!(document.frmResultados.optCodigo.length))
    {
        
//El que este seleccionado devuelve su valor
        
if (document.frmResultados.optCodigo.checked)
        {
            return 
frmResultados.optCodigo.value;
        }
        else
        {
            return 
null;
        }
    }
    else
    {
        
//Si es un array lo recorre
        
for (i=0;i<document.frmResultados.optCodigo.length;i++)
        {
        
            
//Si esta marcado ese se devuelve
             
if(document.frmResultados.optCodigo[i].checked)
            {
                
//Devuelve si lo encuentra
                
return frmResultados.optCodigo[i].value;
            }
        }
// for
    
}
    
//devuelve null si no ha encontrado nada
    
return null;


  #5 (permalink)  
Antiguo 02/05/2006, 04:10
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Buenas ErzengelP2MTeaM:

He intentado tu solución, después de adaptar los nombres de formulario y radiobuttons. Pero no me funciona correctamente. Y es que, aunque seleccione uno de los radiobuttons, no continúa mandando el formulario a su destino.

Por ejemplo. ¿el último "return null" no tendría que ir dentro de alguno de las condiciones cuando no hay nada seleccionado?

¿Me puedes explicar un poco más el funcionamiento de tu código?

Igual, también, si echas un pequeño vistazillo al código que puse, ves como lo tengo estructurado y puedes responderme mejor...

Saludos

zacktagnan.
================================================== =
  #6 (permalink)  
Antiguo 03/05/2006, 05:52
 
Fecha de Ingreso: abril-2006
Mensajes: 16
Antigüedad: 18 años
Puntos: 0
Hola zacktagnan.

Hoy ya estaba más por la labor de leer jejejej

He mirado tu código y he visto el problema que tienes en él y por el cual te da fallos cuando queda un sólo elemento (e imagino que si no hay ningún radio también te dará fallos cuando intente localizar los radio button).

El problema que hay es en:

Código:
while (!selecc && (x <opcion.length))
Debido a que sí funciona correctamente cuando tienes varios radio (un array), pero cuando tienes un solo radio ese .length no te va a encontrar nada debido a que no existe ningún array.

Es por ello que en el código que te puse, (aparte de comprobar que haya algun radio) compruebo que si hay un sólo elemento lo trate individualmente. En tu caso por ejemplo sería:

Código HTML:
//Caso de que no sea un array(sólo exista un radiobutton), el opcion.length 
//no existirá y se le trata de manera individual
//para saber si está marcado o no
if (!(opcion.length)) 
{ 
     //El que este seleccionado devuelve su valor 
     if (opcion.checked) 
     { 
         selecc = true;
     } 
} 
//En caso de que haya varios radiobuttons procedemos a recorrerlos
else
{
	
      while (!selecc && (x <opcion.length)) 
      {			
              if (opcion[x].checked) 
              {
	        selecc = true;
	 }
	 x++;
      }
}
Espero que te sirva si aun no habías dado con ello. Ya me dirás algo
Un saludito
  #7 (permalink)  
Antiguo 03/05/2006, 05:56
 
Fecha de Ingreso: abril-2006
Mensajes: 16
Antigüedad: 18 años
Puntos: 0
Por cierto, esto de arriba no soluciona el error javascript que te dará en caso de que llames a la función sin haber ningún radiobutton, pero como eso ya es fácil y no sé si lo tratas en otra parte de la página lo dejo en tus manos :P
  #8 (permalink)  
Antiguo 04/05/2006, 01:53
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Buenas ErzengelP2MTeam:

¡¡Perfecto!!

Ya he probado tu solución y resuelve el problema que planteaba.
Ahora ya puedo eliminar el último registro existente en la lista.

En cuánto a los casos en los que no hubiera ningún registro, osea ningún radiobutton, ya lo resuelvo no mostrando el formulario y mostrando un mensaje indicando que no existen registros.

Nada más, si ves este mensaje, ErzengelP2MTeam, te agradezco la ayuda prestada al compartir tus conocimientos conmigo (y con todo al que le ayudara la solución de este problema).

Hasta la próxima.

Saludos,

zacktagnan.
===================================
  #9 (permalink)  
Antiguo 05/05/2006, 03:08
 
Fecha de Ingreso: abril-2006
Mensajes: 16
Antigüedad: 18 años
Puntos: 0
Un placer zacktagnan me alegro que te sirviera, para eso estamos, para ayudarnos entre todos

Hasta luego!!!
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 17:29.