Bei Javascriptaufruf ein URI-Problem laut HTML-Tidy
Mario
- javascript
Liebe Forumianer,
ich habe eine Frage zur Fehlermedlung von HTML-Tidy:
<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.
Setze ich den Funktionsaufruf folgendermaßen:
<a href="#" onClick="lnker('form','set', '2');">Infos</a>
...ist Tidy zufrieden, jedoch gibt es jetzt Schwierigkeiten mit der Scriptausführung. Sobald sich in der Javascript-Funktion "Seiten-Neuaufbauende" Elemente (z.B. Ein Submit() - lößt einen Seitenaufbau aus, Oder ein history.back() - lößt auch einen Seitenaufbau aus) befinden, gibt es einen unschönen Effekt:
Das Doppelkreuz sorgt dafür, das als HREF die aktuelle Seiten-URI+Doppelkreuz mit übertragen wird. Dieser Link hat dann anscheinend mehr Wert als die "Seiten-Neuaufbauenden" Elemente und wird stattdessen ausgeführt.
Gibt es eine Lösung?
Vielen Dank, Mario
Hi,
Gibt es eine Lösung?
- Eine Alternative zu den einfachen Anführungszeichen? Oder
Das ist nicht dein problem, ich tippe da eher auf den Doppelpunkt, arbeite aber nicht mit Tidy.
- Eine Möglichkeit den Link in der Javascriptfunktion zu unterdrücken?
<a href="#" onClick="lnker('form','set', '2'); return false;">Infos</a>
sollte das lösen. habs aber nicht getestet, erscheint mir aber logisch.
Hi,
Das ist nicht dein problem, ich tippe da eher auf den Doppelpunkt, arbeite aber nicht mit Tidy.
irgendwie wäre es mir neu, dass der Doppelpunkt in z.B. "http://de.selfhtml.org/" ein Problem darstellte.
Cheatah
irgendwie wäre es mir neu, dass der Doppelpunkt in z.B. "http://de.selfhtml.org/" ein Problem darstellte.
Hast recht, es ist das javascript:, nicht der Doppelpunkt alleine.
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:
- Eine Möglichkeit den Link in der Javascriptfunktion zu unterdrücken?
return false, siehe oben.
Mathias
Hi,
»javascript: ...« ist keine gültige URI, deswegen schlägt Tidy Alarm.
hm. Ich behaupte, dass sich Tidy nicht am Pseudoprotokoll stört (und wenn doch, gehört's erschlagen ;-)), sondern vor allem am Leerzeichen. Klammern und Quotes sind natürlich ebenfalls Kandidaten.
In dem Punkt solltest du die Ursache von Tidys Fehlermeldung erkennen und beheben, nicht herumbasteln, um Tidy zufriedenzustellen.
ACK, zumal Tidy allenfalls informativ ist.
href="javascript:..." ist praktisch möglich, entspricht aber keinem Standard.
Wieso nicht? Was ist daran falsch?
Es hat keine praktischen Nachteile, href="javascript:..." zu benutzen im Vergleich zu href="#" onclick="...".
Es gibt Unterschiede, also - je nach Anwendungsfall - auch Nachteile.
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:...".
Wenn es keine sinnvolle Alternativ-URI gibt, ist dies tatsächlich sogar ein Grund, das href-Attribut mit einer javascript:-URL zu füllen. Natürlich sollte dann ohnehin der Link per JavaScript ausgegeben werden, aber das ist ein anderes Thema.
<a href="#" onClick="lnker('form','set', '2');">Infos</a>
Damit hast du praktisch gar nichts gewonnen.
Doch, je nachdem, wie "Gewinn" definiert wird. Die beiden Empfehlungen, "onclick" XHTML-konform zu schreiben und einen return-Wert auszuliefern, sind natürlich obligatorisch.
Cheatah
hi,
Wenn es keine sinnvolle Alternativ-URI gibt, ist dies tatsächlich sogar ein Grund, das href-Attribut mit einer javascript:-URL zu füllen.
Kann ich nicht finden - dann kann doch auch onClick auf einem anderen Element benutzt werden.
gruß,
wahsaga
Hallo,
Wenn es keine sinnvolle Alternativ-URI gibt, ist dies tatsächlich sogar ein Grund, das href-Attribut mit einer javascript:-URL zu füllen.
Kann ich nicht finden - dann kann doch auch onClick auf einem anderen Element benutzt werden.
Naja, auch JavaScript-verseuchte Sites wie etwa Ajax-Anwendungen sollten klassische Links und Schaltflächen benutzen. <irgendeinelement onclick="..."> lässt sich zwar mit CSS wie eine Schaltfläche oder ein Hyperlink formatieren, aber lässt sich nicht über die üblichen Mechanismen z.B. per Tastatur anspringen und aktivieren.
Mathias
hi,
Naja, auch JavaScript-verseuchte Sites wie etwa Ajax-Anwendungen sollten klassische Links und Schaltflächen benutzen.
Mit Schaltflächen bin ich sofort einverstanden - mit dem Link aber nicht, wenn es kein wirkliches "HTML-Linkziel" gibt.
<irgendeinelement onclick="..."> lässt sich zwar mit CSS wie eine Schaltfläche oder ein Hyperlink formatieren, aber lässt sich nicht über die üblichen Mechanismen z.B. per Tastatur anspringen und aktivieren.
Das ist allerdings ein berechtigtes Argument.
gruß,
wahsaga
Hallo,
<irgendeinelement onclick="..."> lässt sich zwar mit CSS wie eine Schaltfläche oder ein Hyperlink formatieren, aber lässt sich nicht über die üblichen Mechanismen z.B. per Tastatur anspringen und aktivieren.
Das ist allerdings ein berechtigtes Argument.
Wobei man das einschränken muss, man sucht dafür schon eine Lösung, die aber noch nicht überall funktioniert. Durch tabindex wird Element Tastatur-fokussierbar:
http://developer.mozilla.org/en/docs/Key-navigable_custom_DHTML_widgets
http://developer.mozilla.org/en/docs/Accessible_DHTML
Mathias
Hi,
Wenn es keine sinnvolle Alternativ-URI gibt, ist dies tatsächlich sogar ein Grund, das href-Attribut mit einer javascript:-URL zu füllen.
Kann ich nicht finden - dann kann doch auch onClick auf einem anderen Element benutzt werden.
richtig. Sofern nicht aus anderen Gründen ein Link "gebraucht" wird, z.B. wegen struktureller Einheitlichkeit.
Cheatah
Hallo.
Sofern nicht aus anderen Gründen ein Link "gebraucht" wird, z.B. wegen struktureller Einheitlichkeit.
Die ist es doch, der wir Listen mit nur einem einzigen Eintrag zu verdanken haben, oder?
MfG, at
Hallo,
href="javascript:..." ist praktisch möglich, entspricht aber keinem Standard.
Wieso nicht? Was ist daran falsch?
Es ist kein registriertes URI-Scheme.
Es hat keine praktischen Nachteile, href="javascript:..." zu benutzen im Vergleich zu href="#" onclick="...".
Es gibt Unterschiede, also - je nach Anwendungsfall - auch Nachteile.
Nämlich? onclick feuert i.d.R. auch beim Aktivieren per Tastatur, also müssten beide Konstruktionen äquivalent sein. href="#" erzeugt dafür in nicht JavaScript-fähigen Browsern u.U. einen verwirrenden Sprung, href="javascript:" tut dies zumindest nicht. (Dazu kommen lassen muss man es sowieso nicht.) Also eher Vorteile auf Seiten von »javascript:«.
Mathias
Hi,
Wieso nicht? Was ist daran falsch?
Es ist kein registriertes URI-Scheme.
das sind about und svn+ssh auch nicht, trotzdem dürfen und müssen sie Anwendung finden. Laut RFC 2396 spricht IMHO auch nichts dagegen.
Es hat keine praktischen Nachteile, href="javascript:..." zu benutzen im Vergleich zu href="#" onclick="...".
Es gibt Unterschiede, also - je nach Anwendungsfall - auch Nachteile.
Nämlich?
Beispiel: Bei onclick wird nicht (ohne weiteres Zutun) dem Link gefolgt.
href="#" erzeugt dafür in nicht JavaScript-fähigen Browsern u.U. einen verwirrenden Sprung,
Richtig. Dies kann ein weiterer Vorteil sein.
href="javascript:" tut dies zumindest nicht.
Richtig. Auch dies kann ein Vorteil sein.
Also eher Vorteile auf Seiten von »javascript:«.
Du hast Unterschiede aufgelistet, also zunächst einmal wertungsfreie Tatsachen. Wie kommst Du dazu, diese für alle Anwendungsbereiche als Vorteil zu definieren?
Cheatah