Anzeige:
Ergebnis 1 bis 7 von 7

Thema: JavaScript per <a> ausführen. Standard-Methode?

  1. #1
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101

    JavaScript per <a> ausführen. Standard-Methode?

    hi

    Wenn ich JavaScript-Code bei einem Klick auf einen Link ausführen will, habe ich mehrere Möglichkeiten.

    Möglichkeit 1:

    Code:
    <a href="javascript: func1();">test-link</a>
    Möglichkeit 2:

    Code:
    <a onclick="javascript: func1();">test-link</a>
    Möglichkeit 3:

    Code:
    <a href="#" onclick="javascript: func1();">test-link</a>
    Möglichkeit 1 hat den Nachteil, dass der Firefox sich zunächst zwar richtig verhält, aber dann trotzdem noch behauptet, nach der "Seite" zu suchen. Das würde ich gerne verhindern. IM IE habe ich es jetzt nicht getestet.
    Möglichkeit 2 hat den Nachteil, dass der Browser das nicht als Link erkennt und dementsprechend auch keine Hand als Cursor anzeigt. Das könnte man wieder durch css korrigieren, wäre aber auch nicht so schön.
    Möglichkeit 3 funktioniert zwar im IE korrekt, soweit ich weiß, aber im Firefox verweist der Link dann auf die aktuelle Seite (kompletter URL) und hängt die Raute (#) hinten an (z.B. 'http://bla.de/index.html?a=1&b=2#').


    Nun zu meiner Frage:

    Gibt es einen Weg, der bestenfalls vom W3C vorgeschlagen/vorgeschrieben wird, um dieses Problem zu lösen?

    Qudus

  2. #2
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Möglichkeit 1:
    Code:
    <a href="javascript: func1();">test-link</a>
    ist soweit ok, aber das Leerzeichen hinter dem Pseudo-Protokoll javascript muss weg. Semmelkorn setze ich nur, wenn noch weitere functions folgen.

    Möglichkeit 2:
    Code:
    <a onclick="javascript: func1();">test-link</a>
    (... und 3) ist Quatsch mit Soße, bei onclick steht keine Pseudoprotokoll-Angabe.

    Also korrekt:
    Code:
    onclick="mach_vorwaerts()"
    Zudem verwende ich sowas nur mit DOM-Elementen, z.B.
    Code:
    <img src="schoenesBild.jpg" alt="Überraschung" onclick="mach_hin()">
    Zur Zeit aber noch nicht bei allen Elementen sicher, bei img schon, bei Tabellenzellen kann es sein, dass der IE6 noch nicht mitmacht.

    Zudem wird das Konstrukt
    Code:
    <a href="javascript:mach_hin()">dingsbumsda</a>
    beim Hovern in der Statuszeile angezeigt, was doch ganz angenehm ist.


    so long,
    BlueJay
    Geändert von BlueJay (06-10-2005 um 16:07 Uhr)

  3. #3
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101
    Zitat Zitat von BlueJay
    ist soweit ok, aber das Leerzeichen hinter dem Pseudo-Protokoll javascript muss weg.
    Das Leerzeichen hinter dem 'javascript:' ist standard-technisch egal, glaube ich. Und ich finde es schöner. Daher werde ich es drin lassen, wenn es keine Probleme verursacht. Der W3C-Validator mäkelt das jedenfalls nicht an.

    Zitat Zitat von BlueJay
    Semmelkorn setze ich nur, wenn noch weitere functions folgen.
    Das halte ich für schlechten Stil und im Prinzip sogar für einen Fehler. Denn man geht dann davon aus, dass es in diesem Fall augenscheinlich klar ist und überlässt es dem Parser, diesen Fehler zu korrigieren. Selbstverständlich muss jede JavaScript-Zeile mit einem Semikolon abgeschlossen werden. Tut man das nicht, muss der Fehler vom Parser (Browser) erkannt un korrigiert werden.
    Da schreibe ich doch lieber direkt korrekten Code.

    Zitat Zitat von BlueJay
    (... und 3) ist Quatsch mit Soße, bei onclick steht keine Pseudoprotokoll-Angabe.
    Selbstverständlich! Denn es stehen auch andere script-Sprachen zur auswahl, die ich mit diesem Pseudo-Protokoll auswählen kann. Und obwohl JavaScript sinnvollerweise Default ist, sollte und kann man eine Sprache an dieser Stelle wählen; in jedem Event-Attribut und im href.

    Also korrekt:
    Code:
    onclick="javascript: mach_vorwaerts();"
    Zitat Zitat von BlueJay
    Zudem verwende ich sowas nur mit DOM-Elementen, z.B.
    Code:
    <img src="schoenesBild.jpg" alt="Überraschung" onclick="mach_hin()">
    Zur Zeit aber noch nicht bei allen Elementen sicher, bei img schon, bei Tabellenzellen kann es sein, dass der IE6 noch nicht mitmacht.

    Zudem wird das Konstrukt
    Code:
    <a href="javascript:mach_hin()">dingsbumsda</a>
    beim Hovern in der Statuszeile angezeigt, was doch ganz angenehm ist.
    Aus diesem Grund wollte ich <a> verwenden und nicht den <img>-Tag, der darin liegt, direkt. Außerdem ist <a> auch ein DOM-Element.

    Ich danke dir aber trotzdem für Deine Antwort.

    Qudus

  4. #4
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    (Semikola bei Javascript-Protokoll)

    Das halte ich für schlechten Stil und im Prinzip sogar für einen Fehler.
    ...
    Selbstverständlich muss jede JavaScript-Zeile mit einem Semikolon abgeschlossen werden.
    Du hast recht, aber nur im letzten Satz.
    Deshalb geht auch die Sache ohne Semikolon brav beim Validator durch. :;

    Das andere Konstrukt, in dem das Ganze als Attribut im Event-Handler oder im Link auftaucht, stammt so aus "DOM0"-Zeiten. Leider sind die pre- DOM-Spezifikationsseiten von Netscape derzeit unauffindbar, deshalb also ein Zitat aus SelfHTML (man beachte die Schreibweise, die auch so auf der W3C-Seite benutzt wird):
    http://de.selfhtml.org/javascript/in...cript_htmltags
    http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.2
    (ca. eine Seite nach unten)

    Das mit dem Pseudoprotokoll javascript: wollen die W3C-Brüder gerüchteweise aussterben lassen. In 4.01 ist es aber noch drin.

    so long,
    BlueJay

  5. #5
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101
    Zitat Zitat von BlueJay
    Deshalb geht auch die Sache ohne Semikolon brav beim Validator durch. :;
    Das ist ja zunächst mal der Fall, weil sich der Validator nicht darum kümmert, ob das JavaScript-Coding syntaktisch korrekt ist.

    Zitat Zitat von BlueJay
    Das andere Konstrukt, in dem das Ganze als Attribut im Event-Handler oder im Link auftaucht, stammt so aus "DOM0"-Zeiten. Leider sind die pre- DOM-Spezifikationsseiten von Netscape derzeit unauffindbar, deshalb also ein Zitat aus SelfHTML (man beachte die Schreibweise, die auch so auf der W3C-Seite benutzt wird):
    http://de.selfhtml.org/javascript/in...cript_htmltags
    http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.2
    (ca. eine Seite nach unten)
    Also, da steht aber nicht, dass das verboten ist. Zugegeben; es wird dort so verwendet, wie Du das sagst. Aber es wird nirgendwo gesagt, dass man das 'javascript:' nicht verwenden darf und auch nicht, dass man es verwenden muss. Falls ich es übersehen habe könntest Du mir vielleicht den Abschnitt hier quoten oder mir den genauen Absatz nennen.

    Ich kann Dir jetzt leider keine Referenz angeben, aber die Definition, die ich mal gelesen habe, lautet ungefähr so:

    Zitat Zitat von unbekannt->Qudus
    Wird in einem event-handler script-code notiert, so kann die Script-Sprache mittels 'scriptsprache: ...' angegeben werden. Default ist 'javascript: ...'. Wird also nichts explizit angegeben, wird implizit vom Default ausgegangen.
    Das, was als script-code im Attribut-Wert steht, wird vom HTML-Parser erstmal nur insofern angefasst, dass die escapeten Zeichen ent-escapet werden. Danach wird es aber so wie es ist dem Script-Parser/-Interpreter übergeben.

    Zitat Zitat von BlueJay
    Das mit dem Pseudoprotokoll javascript: wollen die W3C-Brüder gerüchteweise aussterben lassen. In 4.01 ist es aber noch drin.
    Und wie gebe ich dann eine andere Script-Sprache als Javascript an? (Nich dass ich das wollte oder irgendjemand das sollte! vbScript sollte genauso verboten sein wie der IE!)

    Das mit dem Semikolon am Ende jeder Anweisung könnte u.U. ein Problem mit den erlaubten Zeichen sein. So wie in dem Artikel vom W3C in deinem Link beschrieben könnte man eventuell gezwungen sein, ein Semikolon als &semocolon; (oder was auch immer der code ist) darzustellen. Glaube ich aber nicht, da der Validator das sonst anmeckern müsste. Tut er aber nicht.

    Insofern denke ich, dass das Semikolon an dieser Stelle mindestens ok ist.
    Geändert von Qudus (06-10-2005 um 22:15 Uhr)

  6. #6
    Registrierter Benutzer Avatar von BlueJay
    Registriert seit
    27.08.2004
    Beiträge
    825
    Zitat Zitat von Qudus
    Also, da steht aber nicht, dass das verboten ist. Zugegeben; es wird dort so verwendet, wie Du das sagst. Aber es wird nirgendwo gesagt, dass man das 'javascript:' nicht verwenden darf und auch nicht, dass man es verwenden muss.
    Bei den Beispielen steht auch nicht, dass man das davorschreiben kann.
    Dann bleibt das Ganze wohl mal wieder den Browsern überlassen.

    Ich habe dunkel in Erinnerung, dass ein Browser bei Verwendung von javascript: in Events bitterlich auf die Nase fiel.
    Der jetzige Konqueror und der Firefox 1.0.7 schlucken es, sogar mit Leerzeichen, was IE5(6?) nicht passte.
    Ich kann Dir jetzt leider keine Referenz angeben, aber die Definition, die ich mal gelesen habe, lautet ungefähr so:
    Das, was als script-code im Attribut-Wert steht, wird vom HTML-Parser erstmal nur insofern angefasst, dass die escapeten Zeichen ent-escapet werden. Danach wird es aber so wie es ist dem Script-Parser/-Interpreter übergeben.
    Genau hier:
    http://www.w3.org/TR/WD-script-970314.html#deflang,
    "Reserved Syntax for HTML CDATA attributes"

    Und dann scheint so was wie ein Gewohnheitsrecht zu gelten: neuere Texte enthalten das Semikolon teilweise, ältere nicht (dev.mozilla.org). Ich denke mal, dass es zu "DOM0"-Zeiten so war. Überreste fand ich noch hier:
    http://wp.netscape.com/eng/mozilla/3...ok/javascript/
    bei Embedding Javascript in HTML.
    Netscape hat's erfunden, Netscape hatte das Sagen

    Nach ECMA263 haben die Semikolonsetzer recht, aber auch die DOM0-Veteranen, auf die W3C ja betont Rücksicht nimmt

    Und wie gebe ich dann eine andere Script-Sprache als Javascript an?
    ... die entsprechenden Funktionen deklarieren in einem Bereich mit dem Kopf
    <script type="text/kuddelmuddel"......

    Insofern denke ich, dass das Semikolon an dieser Stelle mindestens ok ist.
    Es ist ok.

    so long,
    BlueJay

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.07.2003
    Beiträge
    147
    Ich bin mir nicht sicher, ob das Fehlverhalten bei Möglichkeit e1 schon geklärt ist (ich habe die Interpuktions-Diskussion nur überflogen)

    Möglichkeit 1 hat den Nachteil, dass der Firefox sich zunächst zwar richtig verhält, aber dann trotzdem noch behauptet, nach der "Seite" zu suchen. Das würde ich gerne verhindern.
    es sollte funktionieren, wenn die funktion false zurückgibt.

    mfg
    c.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •