Flo: onClick vs. javascript:

Hi zusammen,
ich knoble gerade an einem komischen Problem:

Ich habe im Head einer Seite eine Javascript-Funktion definiert (es ist egal, ob ich das in einem script-Block im head mache oder eine externe Datei referenzierte, die die Funktionsdefinition enthält). Nennen wir sie mal meineFunktion().

So, es gibt ja nun prinzipiell 2 Möglichkeiten, so ne Funktion aufzurufen, wenn jemand wohin klickt, und zwar entweder:

<a href="#" onClick="meineFunktion()">Klick hier</a>

oder:

<a href="javascript:meineFunktion()">Klick hier</a>

Beides sind doch standardkonforme Varianten (?), außerdem ist die Seite transitional, die Browser parsen also sowieso im Quirks-Mode (hoffentlich... ;-)

Das komische ist nun: Variante1 funktioniert, Variante2 funktioniert nicht, Netscape sagt mir hier: Die Funktion meineFunktion() ist nicht definiert, der IE sein standardmäßiges "Objekt nicht gefunden".

Gibts ne Erklärung, warum? Und wie man das trotzdem mit der 2ten Variante lösen kann?

Danke für Eure Hilfe!

  1. Das komische ist nun: Variante1 funktioniert, Variante2 funktioniert nicht, Netscape sagt mir hier: Die Funktion meineFunktion() ist nicht definiert, der IE sein standardmäßiges "Objekt nicht gefunden".

    Gibts ne Erklärung, warum? Und wie man das trotzdem mit der 2ten Variante lösen kann?

    Nein, gibt es nicht. Du machst an irgendeiner anderen Stelle einen Fehler.

    Struppi.

  2. Hi,

    Und wie man das trotzdem mit der 2ten Variante lösen kann?

    wozu willst Du unbedingt javascript: verwenden, welches kein gültiges Protokoll darstellt? Nur um die Funktion bzw. einen Hinweis hierauf in der Statuszeile stehen zu haben? Das könntest Du über eine entsprechende Anker-Angabe auch zumindest teilweise erreichen.
    Und wenn Du der ersten variante ein return false mitgibst, wird auch kein Anker bei aktiviertem Javascript angesprungen.

    freundliche Grüße
    Ingo

    1. Hallo.

      Und wenn Du der ersten variante ein return false mitgibst, wird auch kein Anker bei aktiviertem Javascript angesprungen.

      Genau das habe ich immer gehasst, also das bei # immer zum Anfang gesprungen wird.
      Mit return false. Stimmt, hätte ich auch selber drauf kommen können.

      Schönen Dank, H2O

      --
      Griechenland ist Europa-Meister. Wer hätte das gedacht?
      ie:% fl:| br:^ va:| ls:# fo:| rl:? n4:| ss:{ de:] js:) ch:? sh:( mo:? zu:|
      Infos: http://emmanuel.dammerer.at/selfcode.html
      1. Hi,

        Genau das habe ich immer gehasst, also das bei # immer zum Anfang gesprungen wird.
        Mit return false. Stimmt, hätte ich auch selber drauf kommen können.

        und übrigens: man kann dann im href-Atribut auch eine existente Seite referenzieren, auf der ein Hinweis, Hilfen oder gar eine vollständige Alternative für User mit deaktiviertem Javascript ist.

        freundliche Grüße
        Ingo

        1. Hallo.

          und übrigens: man kann dann im href-Atribut auch eine existente Seite referenzieren, auf der ein Hinweis, Hilfen oder gar eine vollständige Alternative für User mit deaktiviertem Javascript ist.

          Spitzenidee.

          Vielen Dank, H2O

          --
          Griechenland ist Europa-Meister. Wer hätte das gedacht?
          ie:% fl:| br:^ va:| ls:# fo:| rl:? n4:| ss:{ de:] js:) ch:? sh:( mo:? zu:|
          Infos: http://emmanuel.dammerer.at/selfcode.html
          1. Hi,

            und übrigens: man kann dann im href-Atribut auch eine existente Seite referenzieren, auf der ein Hinweis, Hilfen oder gar eine vollständige Alternative für User mit deaktiviertem Javascript ist.

            Spitzenidee.

            und noch einen Schritt weitergedacht: wenn man den Rückgabewert der Funktion überläßt, kann diese Seite auch z.B. bei Scriptfehlern aufgerufen werden. Dazu sollte man den Rückgabewert natürlich im Aufruf negieren.

            freundliche Grüße
            Ingo

            1. Hallo.

              und noch einen Schritt weitergedacht: wenn man den Rückgabewert der Funktion überläßt, kann diese Seite auch z.B. bei Scriptfehlern aufgerufen werden. Dazu sollte man den Rückgabewert natürlich im Aufruf negieren.

              Jetzt komme ich nicht mehr mit.
              Also was meinst du mit Rückgabewert.
              Und was heißt negieren?

              Könntest du ein kleines Beispiel nennen?

              Schönen Dank, H2O

              --
              Erst selber im </archiv/> suchen: http://suche.de.selfhtml.org/
              Dann gibt es noch http://www.google.de/ und erst dann das Forum fragen.
              ie:% fl:| br:^ va:| ls:# fo:| rl:? n4:| ss:{ de:] js:) ch:? sh:( mo:? zu:|
              Infos: http://emmanuel.dammerer.at/selfcode.html
              1. hi,

                Jetzt komme ich nicht mehr mit.
                Also was meinst du mit Rückgabewert.

                die funktion gibt true oder false zurück, je nachdem ob ihre gewünschte aktion funktioniert hat.

                Und was heißt negieren?

                na ja, negieren halt - booleschen wert umdrehen, aus true false machen, et vice versa.

                function blah() {
                   var fenster = window.open(...);
                   return !fenster;
                }

                <a href="alternative.html" onClick="return blah();" ...>

                blah() gibt jetzt false zurück, wenn das öffnen des popups geklappt hat (wegen der negation durch !fenster), der eventhandler reicht diesen rückgabewert wiederum mit return in der event-hierachie weiter nach oben durch, der eigentliche HTML-link wird also nicht mehr ausgeführt.
                konnte das popup jedoch nicht geöffnet werden, gibt die funktion true zurück, eventhandler reicht durch, link wird ausgeführt.

                gruß,
                wahsaga

                --
                I'll try being nicer if you'll try being smarter.
                1. Hallo wahsaga.

                  blah() gibt jetzt false zurück, wenn das öffnen des popups geklappt hat (wegen der negation durch !fenster), der eventhandler reicht diesen rückgabewert wiederum mit return in der event-hierachie weiter nach oben durch, der eigentliche HTML-link wird also nicht mehr ausgeführt.
                  konnte das popup jedoch nicht geöffnet werden, gibt die funktion true zurück, eventhandler reicht durch, link wird ausgeführt.

                  Hab ich jetzt verstanden.

                  Danke, H2O

                  --
                  Erst selber im </archiv/> suchen: http://suche.de.selfhtml.org/
                  Dann gibt es noch http://www.google.de/ und erst dann das Forum fragen.
                  ie:% fl:| br:^ va:| ls:# fo:| rl:? n4:| ss:{ de:] js:) ch:? sh:( mo:? zu:|
                  Infos: http://emmanuel.dammerer.at/selfcode.html
              2. Hallo H2O,

                Jetzt komme ich nicht mehr mit.
                Also was meinst du mit Rückgabewert.
                Und was heißt negieren?

                Könntest du ein kleines Beispiel nennen?

                Ich habe das hier ([pref:t=83867&m=491627]) versucht zu erklären.
                B.t.w. das Ding ist zum Testen freigegeben ;-) Was mich vor allem noch interesserien würde ist, ob bei einem geblockten window.open wirklich "null" oder "false" zurückgeben wird und dann der href ausgeführt wird.

                Grüsse
                Siramon,
                     ja der Penner aus Nr. 14

  3. noch ein kleiner tip:

    wenn du auf der seite zeigen möchtest, dass etwas klickbar ist, kannst du es am besten mit dem hand-cursor lösen (hier am <p>-Beispiel):

    <p style="cursor:hand" onClick="javascript:alert('klick')">test</p>

    Mfg,
    shirinka

    1. Hi,

      wenn du auf der seite zeigen möchtest, dass etwas klickbar ist, kannst du es am besten mit dem hand-cursor lösen (hier am <p>-Beispiel):
      <p style="cursor:hand" onClick="javascript:alert('klick')">test</p>

      Wenn schon, dann cursor:pointer. cursor:hand ist nicht Bestandteil von CSS (das ist MS-proprietärer Unsinn)

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.Mud-Guard.de/
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.