Hola:
La validación debe hacerse con onsubmit... y parece que lo intentas, pero debe ser en el tag form y la validación hay que hacerla con return...
<form onsubmit="return validar(this)" ...>
Y la función de validación debe devolver true/false (false cancela el submit)... Fíjate en la respuesta de capi (¡hola

!)
Saludos