Eu vi os seguintes métodos de colocar o código JavaScript em uma <a>
tag:
function DoSomething() { ... return false; }
<a href="javascript:;" onClick="return DoSomething();">link</a>
<a href="javascript:DoSomething();">link</a>
<a href="javascript:void(0);" onClick="return DoSomething();">link</a>
<a href="#" onClick="return DoSomething();">link</a>
Eu entendo a ideia de tentar colocar um URL válido em vez de apenas código JavaScript, apenas no caso de o usuário não ter o JavaScript habilitado. Mas para o propósito desta discussão, preciso assumir que o JavaScript está habilitado (eles não podem fazer o login sem ele).
Pessoalmente, gosto da opção 2, pois ela permite que você veja o que será executado - especialmente útil ao depurar onde há parâmetros sendo passados para a função. Tenho usado bastante e não encontrei problemas com o navegador.
Eu li que as pessoas recomendam 4, porque dá ao usuário um link real para seguir, mas realmente # não é "real". Não irá a lugar nenhum.
Há algum que não seja compatível ou seja muito ruim, quando você sabe que o usuário está com o JavaScript habilitado?
Pergunta relacionada: Href para links JavaScript: “#” ou “javascript: void (0)”? .