Si no retornas
false
o no utilizas el método
.preventDefault()
, el envío no se cancelará.
Podrías hacer algo similar a esto:
Código Javascript
:
Ver originaldocument.addEventListener("DOMContentLoaded", function(){
document.querySelector("[name=formulario]").addEventListener("submit", function(event){
event.preventDefault();
var enviar = true,
options = this.querySelectorAll("[type=radio]"),
total = options.length
i = 0;
for (i = 0; i < total; i++){
if (!options[i].checked){
enviar = false;
break;
}
}
if (enviar){
this.submit();
}
else{
alert("Debe de seleccionar todas las opciones");
}
}, false);
}, false);
Esto es simple. Luego de cargar todos los elementos del documento,
registro el evento
submit
al formulario. Dicho evento es que el se produce cuando envías sus datos para ser procesados. Una vez ocurrido esto, ejecuto una función que recibe como argumento al
objeto del evento que está ocurriendo. Mediante el método
.preventDefault()
, cancelo dicho envío. Declaro algunas variables, entre las que está una variable auxiliar para determinar si se realizará el envío de los datos del formulario luego de la validación y que tendrá el valor
true
por defecto. También tomo a los elementos de tipo "radio" del formulario (
this
hace referencia al formulario dentro de la función que se está ejecutando), el total de estos y una variable contadora para el bucle que usaré para realizar la validación de todos los elementos.
En el bucle, verifico que cada
radiobutton esté marcado. En caso de no estarlo, asigno el valor
false
a la variable auxiliar y termino la ejecución del bucle. Finalmente, verifico si el valor de la variable auxiliar es
true
(evaluándola de esa manera, sin compararla con otro valor, se verifica si es
true
o
false
) y solo si se cumple dicha condición, realizo el envío de los datos del formulario utilizando el método
.submit()
; caso contrario, se muestra un mensaje de alerta en el que se le informa al usuario que debe de seleccionar todas las opciones.
Un saludo