Läuft man einem Javascript-Link in freier Wildbahn über den Weg, ist die Wahrscheinlichkeit sehr hoch, dass dieser in etwa die Form <a onclick="tolle_funktion()" href="#"> hat. Warum nur!

Es scheint so, als würden Leute dies tun, weil sie nichts besseres haben, das sie den Link referenzieren lassen können. Sie benutzen das Rautezeichen quasi als Ersatz für nichts. Dass das recht wenig Sinn ergibt, versteht sich von selbst. Warum die Raute nehmen, wenn es auch gleich sein lassen könnte? Ich glaube das ist eine dieser seltsamen Traditionen als grauer Frontpage-Zeit, genau wie auch die Verwendung von &nbsp; als normales Leerzeichen.

Statt Rautezeichen oder gar nichts gehört in das href-Attribut eines Links eine schöne URL, mit der man dem User möglichst genau das serviert, was auch die Javascript-Funktion zu bieten hat. Dann kommen nämlich auch jene, die kein Javascript zur Hand haben, in den Genuss der hinter dem Link verborgenen Informationen. Außerdem interpretieren Browser href="#" als Sprunglink zum Seitenanfang. Das will man doch wirklich nur in Ausnahmefällen.

Es gibt also keinen Grund, warum das href-Attribut eines Links jemals # sein sollte. Besser:

<a href="/ersatz-url/index.html" onclick="return tolle_funktion()">

Wenn man auf diesen Link klickt, und tolle_funktion() läuft wie sie soll, gibt sie (ordentliche Programmierung vorausgesetzt) false zurück und der Link ruft die url in href nicht auf. Wenn aber die Funktion auf Probleme stößt, wird nichts bzw. true zurückgegeben und der Benutzer landet bei der Ersatz-URL. Eine Testseite zur Demonstration steht bereit.

Wenn man das alles haben kann, warum noch zur Raute greifen?

Nachtrag vom Februar 2012: wie man Javascript-URLs für moderne Webapps mit HTML5 umsetzt, erklärt dieser Artikel.