Yo te propongo hacerlo así:
Código Javascript
:
Ver originalvar form = document.getElementsByTagName("form")[0],
elementos = form.elements,
total = elementos.length,
radios = [],
totalRadios = 0;
for (i = 0; i < total; i++)
if (elementos[i].getAttribute("type") == "radio"){
radios.push(elementos[i]);
totalRadios++;
}
form.addEventListener("submit", function(e){
e.preventDefault();
var comodin = 0;
for (i = 0; i < totalRadios; i++)
if (!radios[i].checked) comodin++;
if (comodin == totalRadios)
alert("Debe de seleccionar una opción");
else
for (i = 0; i < total; i++)
switch (elementos[i].getAttribute("type")){
case "text":
if (!elementos[i].value.length)
elementos[i].value = prompt("¿Cuántos años tienes?");
break;
case "radio":
if (elementos[i].checked)
alert(elementos[i].value);
break;
}
}, false);
Inicialmente, defino en variables al formulario, sus elementos, el total de elementos, un array en el que incluiré a todos los radio buttons del formulario (más adelante) y una variable en la que acumularé el total de radio buttons. Enseguida, busco entre los elementos del formulario a todos los elementos de tipo "radio" y por cada coincidencia, añado el elemento actual al array que declaré previamente y sumo 1 a
totalRadios.
Luego, cuando mande el formulario a procesarse (evento
submit), cancelo dicho evento con el método
preventDefault, declaro una variable
comodín y busco entre los elementos del array
radios, es decir, entre los radio buttons del formulario, a aquellos que no estén marcados. Por cada uno que no lo esté, aumento en uno el valor de
comodin.
Seguidamente, comparo al valor final de
comodin con el total de radio buttons en el formulario. Si son iguales, es decir, si no se marcó un solo radio button, lanzo un mensaje de alerta en el que le digo al usuario que debe marcar uno, caso contrario, recorro a los elementos del formulario y según el tipo de elemento que sean, realizo determinadas acciones. Si es una caja de texto (
type = "text"), verifico si se ha insertado contenido en ella, de
no ser así, obligo al usuario a ingresar el dato faltante a través de una caja de diálogo. Si es un radio button (
type = "radio") y está marcado, muestro en un mensaje de alerta el valor del mismo.
DEMO
Eventualmente, puedes hacer crecer este algoritmo de validación.
Saludos