Hola:
Las validaciones que realmente valen (o importan) son las del servidor, y las de los navegadores pueden ser muy valiosas si son útiles, pero si se desactiva javascript, solo vale la del servidor, y para que lleguen esos datos al servidor, el botón de envío debe ser del tipo submit... Prueba a desactivar javascript e intentar enviar el formulario... ¡a que no se puede!. Si el botón fuese tipo submit, el envío se realizaría y se validaría en el server.
La técnica de la validación con javascript es bien simple: al evento se le asigna el valor false para la cancelación: onsubmit="return false".
Solo tienes que cambiar ese false por una función que devuelva false cuando no valide... sí, es así de sencillo, pero si tu función validadora tiene algún error, no llegará a la instrucción del "return false" y se abortará enviando el formulario.
En resúmen, si lo haaces bien y sin errores es útil; creo que solo te falta depurar correctamente tu código, el consejo que solemos dar es usar las herramientas que tienen los navegadores: la más sencilla es la consola de errores que casi todos tienen.
Saludos