Validación RADIO no siempre funciona

Tengo este script de validación de un formulario de botones radios, y cuyo numero de opciones es variable. Desde 1 opción hasta muchas.

Me funciona perfecto, cuando el mínimo de opciones es de 2. Pero cuando solo tengo una opción, aunque la seleccione, siempre me da la alerta de que no he seleccionado nada. ¿Qué puede ser? Tendrá que ver con el bucle for?

Te dejo el script

<SCRIPT LANGUAGE="JavaScript">
        function comprobar3() {
         var pulsado = false;
         var opciones = document.formulario3.jornada; 
         var elegido = -1; 
         for (i=0;i<opciones.length;i++) { 
               if (opciones.checked == true) {
               pulsado = true 
               elegido = i 
               }
             }
         if (pulsado == true) { 
            miOpcion = opciones[elegido].value
            alert("Has elegido la jornada: " + miOpcion + "\nEnviamos jornada elegida.")
            }
         else { 
            alert("No has elegido ningún partido. \nElige una jornada para enviar resultado.")
            return false 
            }
         }
    </SCRIPT> 

1 respuesta

Respuesta
1

Intenta con la siguiente función

<SCRIPT LANGUAGE="JavaScript">
function comprobar3() {
var pulsado = false;
var opciones = document.getElementsByName("jornada");
var elegido = -1;
for (i=0;i<opciones.length;i++) {
if (opciones.checked == true) {
alert("seleccionado "+i);
pulsado = true
elegido = i
}
}
if (pulsado == true) {
miOpcion = opciones[elegido].value
alert("Has elegido la jornada: " + miOpcion + "\nEnviamos jornada elegida.")
}else {
alert("No has elegido ningún partido. \nElige una jornada para enviar resultado.")
return false
}
}
</SCRIPT>

En vez de trabajar de manera directa sobre el dom, es mejor utilizar las funciones para la navegación entre elementos que ofrece javascript, entones cambiamos

document.formulario3.jornada;

Por esto

document.getElementsByName("jornada");

Y agregamos el indice al recorrido del array dentro del if para que contabilice la opción seleccionada

if (opciones.checked == true) {

Espero que esta solución te sea de ayuda.

Saludos!

Gracias por la rapidez, pero me sigue ocurriendo lo mismo. Cuando las opciones son solo una, no detecta que este pulsado, y me da la alerta de que no he seleccionado nada...

:(

¿Me puedes enviar algún ejemplo de tu código html para ver como estas trabajando tu formulario?

<form name="formulario3" action="subir(5).php" method="post" onsubmit="return comprobar3()">
        <?php            
                        include "../conexion.php";                                       
                        mysql_select_db("tiwehsmales_com",$con); 
        $result = mysql_query ("SELECT JORNADA, ABIERTA, L,GL,GV, V FROM EQ1 where JUGADO=0 AND ABIERTA=1 and COMP='C' ", $con);
        echo "<table>";
        while ($row = mysql_fetch_array ($result))
        {
        echo "<tr>";
        echo "<td><input type=radio name=jornada value=".$row[JORNADA]." /></td>";
        echo "<td><center>" .$row[JORNADA]. "</center></td>";
        echo "<td><center> <td width=30px><img src=../5-competicion/escudos/".$row[L].".png width=40px height=40 px></span> </center></td>";
        echo "<td><center>" .${$row[L]}. "</center></td>";
        echo "<td><center>" .$row[GL]. "</center></td>";
        echo "<td><center>" .$row[GV]. "</center></td>";
        echo "<td><center>" .${$row[V]}. "</center></td>";
        echo "<td><center> <td width=30px><img src=../5-competicion/escudos/".$row[V].".png width=40px height=40 px></center></td>";
        echo "</tr>"; 
        }  
        echo "</table>";
        mysql_free_result ($result);
        ?>
        <input type="submit" value="escoger" name="enviar"> 
        </form>
     

Para desarollar la problemática he trabajado de la siguiente manera

<html>
<head>
<title>Paginas</title>
<script src="./jquery.js"></script>
<script src="./liveFilter.js"></script>
<SCRIPT LANGUAGE="JavaScript">
function comprobar3() {
var pulsado = false;
var opciones = document.getElementsByName("jornada");
var elegido = -1;
alert(opciones.length);
for (i=0;i<opciones.length;i++) {
if (opciones.checked == true) {
alert("seleccionado "+i);
pulsado = true
elegido = i
}
}
if (pulsado == true) {
miOpcion = opciones[elegido].value
alert("Has elegido la jornada: " + miOpcion + "\nEnviamos jornada elegida.")
}else {
alert("No has elegido ningún partido. \nElige una jornada para enviar resultado.")
return false
}
}
</SCRIPT>
</head>
<body>
<form name="formulario3" method="post" action="./">
<input type="radio" name="jornada" value="1">
<input type="radio" name="jornada" value="2">
<input type="radio" name="jornada" value="3">
<input type="button" value="valida" onclick="comprobar3()">
</form>
</body>
</html>

Recuerda cerrar cada propiedad de etiquetas con sus respectivas comillas para que así el navegador pueda recorrer de mejor manera el dom, quizá este sea el problema que esta afectando el desarrollo de tu script. Si continua el problema, chequea la consola javascript y me haces llegar el error que se genere para estar mas cerca de la solución propuesta.

*** Elimina los alert que he colocado específicamente para ver el funcionamiento interno de la función.

Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas