buenas...
el formulario igual se envia porque estas realizando la validacion en el evento onclick. el evento onclick no es quien se encarga de enviar los datos, sino submit. por tanto, es este evento el que tienes que cancelar para evitar enviar el formulario. es decir, en lugar de onclick, debes usar onsubmit. adicional, por si lo desconoce, el evento onsubmit pertenece a <form> y no al <input>. si tienes mas duda respecto a la validacion, consulta el buscador, hay muchisimos temas acerca de ello.