Ah, yo te lo explico.
Al pinchar en el enlace se va a la función, pero cuando acaba la función, se activa el enlace con lo que el submit() queda como anulado.
Es decir, el link activa dos acciones: la función y la referencia. Al hacer click pasa por la función pero tras las alertas se iba a # (osea, así misma) y al cargarse sí misma de nuevo no tenía activa la orden de submit.
Bueno yo me entiendo.
La cuestión que si a un link le indicas return false (devuelve falso) anula la acción del link y así se queda sólo con lo que le diga la función js