molily: Bei Javascriptaufruf ein URI-Problem laut HTML-Tidy

Beitrag lesen

Hallo,

<a href="javascript:lnker('form','set', '2');">Infos</a>

Tidy sagt, das sich in der obigen URI unerlaubte Zeichen enthalten sind. Ich denke mal es handelt sich dabei um die einfachen Anführungsstriche.

»javascript: ...« ist keine gültige URI, deswegen schlägt Tidy Alarm.

In dem Punkt solltest du die Ursache von Tidys Fehlermeldung erkennen und beheben, nicht herumbasteln, um Tidy zufriedenzustellen. href="javascript:..." ist praktisch möglich, entspricht aber keinem Standard. Es hat keine praktischen Nachteile, href="javascript:..." zu benutzen im Vergleich zu href="#" onclick="...".

Sorgen machen solltest du dir aus einem anderen Grund: href="javascript:..." funktioniert natürlich nur, wenn JavaScript unterstützt wird und aktiviert ist. bei <a href="..." onclick="..."> hättest du die Möglichkeit, das href-Attribut sinnvoll zu füllen - href="#" ist im Hinblick auf Zugänglichkeit ohne JavaScript kein Stück sinnvoller als href="javascript:...".

<a href="#" onClick="lnker('form','set', '2');">Infos</a>

Damit hast du praktisch gar nichts gewonnen.

jedoch gibt es jetzt Schwierigkeiten mit der Scriptausführung.

Klar - das Aktivieren des Links löst das click-Ereignis aus. Nachdem der JavaScript-Code abgearbeitet ist, wird die Adresse # annavigiert. Das ist die sogenannte Standardaktion (default action), die einem Klick auf einen Link folgt.

Im Event-Handler kannst du diese Standardaktion unterdrücken, und zwar mit return false: <a href="seite.html" onclick="alert('Das Linkziel wird gleich nicht annavigiert.'); return false">...</a>

  • Eine Alternative zu den einfachen Anführungszeichen?

Nein, wozu auch. Du könntest höchstens anders vorgehen:

  • Zugänglichkeit ohne JavaScript ermöglichen, daher einfache JavaScript-lose Hyperlinks im HTML-Code unterbringen
  • JavaScript-Funktionalität auslagern und Event-Handler automatisch registrieren
  • Eine Möglichkeit den Link in der Javascriptfunktion zu unterdrücken?

return false, siehe oben.

Mathias