Sady: Frage wegen return true

Hallo Ihrs,
also ich lerne in der "Schule" JavaScript und habe jetzt mal mein erstes "eigenes" Mini Script erstellt. Habt bitte Nachsicht mit mir, wir haben heute erst mit JS angefangen...
Aufgabenstellung war, dass bei mousever in der Statuszeile ein Text angezeigt wird, und zwar jedesmal bei jedem Link ein anderer. Dabei sollte mit Variablen und _einer_ Funktion gearbeitet werden. Soweit sogut, funktioniert auch nun alles einwandfrei. Nach langem hin und her habe ich festgestellt, dass das ganze nur dann funktiert, wenn ich das return true direkt in den anchor einbringe. Mein Dozent meinte, er könne es sich nicht erklären, warum es nicht funktioniert, wenn ich das return true direkt in der funktion im head schreibe, anstatt
jedesmal im Anchor. Ja, jedenfalls scheint es nicht zu gehn. Meine Frage : Geht es wirklich nicht? Wenn ja, warum muss ich das return true jedesmal neu im Anchor schreiben, gibt es dafür eine sinnvolle erklärung ? Ich will schliesslich nicht nur schreiben, sondern auch verstehen, was ich da tue ...

Nachstehend mal "mein Script"

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>JS 5</title>
<script language="javascript" type="text/javascript">
<!--
window.defaultStatus="Alternativer Text mit Hilfe der Funktion window.defaultStatus";
function funktion_1(variable)
{
status=(variable);
}
//-->
</script>
</head>
<body bgcolor="#000000">
<p><a href="#" onmouseover="funktion_1('Ausgabe 1'); return true;">Link No.1</a></p>
<p><a href="#" onmouseover="funktion_1('Ausgabe 2'); return true;">Link No.2</a></p>
<p><a href="#" onmouseover="funktion_1('Ausgabe 3'); return true;">Link No.3</a></p>
</body>
</html>

Danke schonmal,

Sady

  1. Hallo Ihrs,

    Hallo Duhs,

    also ich lerne in der "Schule" JavaScript und habe jetzt mal mein erstes "eigenes" Mini Script erstellt. Habt bitte Nachsicht mit mir, wir haben heute erst mit JS angefangen...

    Da kann man nie früh genug mit anfangen...

    Aufgabenstellung war, dass bei mousever in der Statuszeile ein Text angezeigt wird, und zwar jedesmal bei jedem Link ein anderer. Dabei sollte mit Variablen und _einer_ Funktion gearbeitet werden. Soweit sogut, funktioniert auch nun alles einwandfrei. Nach langem hin und her habe ich festgestellt, dass das ganze nur dann funktiert, wenn ich das return true direkt in den anchor einbringe. Mein Dozent meinte, er könne es sich nicht erklären, warum es nicht funktioniert, wenn ich das return true direkt in der funktion im head schreibe, anstatt

    Ich kann mir auch vieles nicht erklären, ich fummel dann einfach so lange rum, bis es klappt.

    jedesmal im Anchor. Ja, jedenfalls scheint es nicht zu gehn. Meine Frage : Geht es wirklich nicht? Wenn ja, warum muss ich das return true jedesmal neu im Anchor schreiben, gibt es dafür eine sinnvolle erklärung ? Ich will schliesslich nicht nur schreiben, sondern auch verstehen, was ich da tue ...

    Mußt Du gar nicht jedesmal return(true) schreiben, kannst auch
    return(funktion_1('Ausgabe')) schreiben, wenn Du ein return(true)
    in der funktion_1 machst.
    Also verstehen tu ichs auch nicht, ich hab nur so eine Vermutung:
    also in dem a-tag da können so verschiedene Sachen drinstehen, die ein Browser so machen soll, wenn er da vorbei kommt. Das können auch Events sein, wie z.B. onMouseOver, onMouseDown, onClick, onBlur usw., die alle in einer bestimmten Reihenfolge (nicht die Reihenfolge in der man das da reinschreibt) abgearbeitet werden.
    Und das onmouseover kommt bestimmt eher dran als das href. Damit er
    das href dann nicht mehr macht mach halt einfach ein return(true) in das mouseover rein damit er aus dem a-tag rausgeht, sonst würde das href ja den schönen Statustext einfach wieder überschreiben, und das wollen wir ja nicht, oder?

    Nachstehend mal "mein Script"

    Sorry, hab ich mal gelöscht.

    Danke schonmal,

    Gern geschehn!

    Sady

    Zu Fasching darf man sich mal verkleiden, wie wär's das _S_ (temporär) gegen _Gl_ auszutauschen?

    Gruß, Lutzy

    1. Hallo Lutzy,

      Ich kann mir auch vieles nicht erklären, ich fummel dann einfach so lange rum, bis es klappt.

      Hat ja dann bei mir auch eigentlich geklappt ;-P

      Mußt Du gar nicht jedesmal return(true) schreiben, kannst auch
      return(funktion_1('Ausgabe')) schreiben, wenn Du ein return(true)
      in der funktion_1 machst.

      Ok, hab ich gemacht und funktioniert. return ist doch dann
      eine Funktion, oder ? Und das true in dem Fall eine Variable ?
      Und beides zusammen wird dann als return true interpretiert,
      weil dem return ja das true zugeordnet wird, hab ich das jetzt
      richtig verstanden ?
      Dann würde dort doch ausgeschrieben stehen
      onmouseover="return true; funktion_1('Ausgabe 1');" oder ?
      Ist es egal ob ich return(true) oder return true schreibe ?

      Damit er das href dann nicht mehr macht mach halt einfach ein return(true) in das mouseover rein damit er aus dem a-tag rausgeht, sonst würde das href ja den schönen Statustext einfach wieder überschreiben

      Das hab ich jetzt nicht verstanden ... :-(

      Sorry, hab ich mal gelöscht.

      schon klar ;-P

      Zu Fasching darf man sich mal verkleiden, wie wär's das _S_ (temporär) gegen _Gl_ auszutauschen?

      Mein Spitzname ist aber Sady *G* Kommt übrigens nicht von Sad,,
      sondern von Cassandra-Sandy-Sady ... *G*

      Greetz Sady

      1. Hallo Sady,

        Ok, hab ich gemacht und funktioniert. return ist doch dann
        eine Funktion, oder ? Und das true in dem Fall eine Variable ?

        Jein, es sieht aus wie ein Funktionsaufruf, aber es ist eher eine Anweisung, return heißt ja auf deutsch _gehe zurück_, und zwar wird bei return die aktuelle Funktion verlassen und das was in Klammern hinter return steht wird als Rückgabewert zurückgegeben. In unserem Fall steht da in Klammern _funktion_1('Ausgabe')_ , d.h. der Rückgabewert der Funktion _funktion_1('Ausgabe')_ (nämlich true) wird mittels
        return(_funktion_1('Ausgabe')_) zurückgegeben.

        Und beides zusammen wird dann als return true interpretiert,
        weil dem return ja das true zugeordnet wird, hab ich das jetzt
        richtig verstanden ?
        Dann würde dort doch ausgeschrieben stehen
        onmouseover="return true; funktion_1('Ausgabe 1');" oder ?

        onmouseover="return true; funktion_1('Ausgabe 1');" würde nicht gehen, weil er nach return true schon weg wäre und funktion_1('Ausgabe 1'); danach nicht mehr ausführen könnte

        Ist es egal ob ich return(true) oder return true schreibe ?

        Im Prinzip geht beides (wahrscheinlich zuliebe der VB-Programmierer, die die Syntax ohne Klamer gewohnt sind). Ich persönlich bevorzuge aber die Version mit Klammern.

        Damit er das href dann nicht mehr macht mach halt einfach ein return(true) in das mouseover rein damit er aus dem a-tag rausgeht, sonst würde das href ja den schönen Statustext einfach wieder überschreiben

        Das hab ich jetzt nicht verstanden ... :-(

        Mach mal noch die Funktion
        function funktion_2(variable)
        { status=variable;
          setTimeout("funktion_1('"+variable+"')",1000);
        }
        in dein Script und jetzt den Aufruf mit
        <p><a href="#" onmouseover="funktion_2('Ausgabe');">Link</a></p>
        ohne return, da wirst Du sehen dass ohne _return true_ zunächst eine
        Sekunde lang der Link vom href angezeigt wird (weil der den Text,der
        in funktion_2 mit status=variable gesetzt wurde, wieder überschreibt)
        erst wenn das setTimeout soweit ist (nach 1000 Millisekunden) wird
        nochmal status=variable geschrieben und diesmal bleibts dann stehen.

        Sorry, hab ich mal gelöscht.

        schon klar ;-P

        Zu Fasching darf man sich mal verkleiden, wie wär's das _S_ (temporär) gegen _Gl_ auszutauschen?

        Mein Spitzname ist aber Sady *G* Kommt übrigens nicht von Sad,,
        sondern von Cassandra-Sandy-Sady ... *G*

        Cassandra hab ich schon mal irgendwo gehört, ist das aus der griechischen Mythologie oder ein Sternbild? Klingt jedenfalls geheimnisvoll.

        Greetz Sady

        Für weiteres Script-Studium darf ich auch etwas Eigenwerbung machen:
        http://www.tu-chemnitz.de/~luta/streich/online.html
        Viel Spaß weiterhin mit JavaScript
        wünscht Lutz

        1. Re-Hi!

          Ist es egal ob ich return(true) oder return true schreibe ?
          Im Prinzip geht beides (wahrscheinlich zuliebe der VB-Programmierer, die die Syntax ohne Klamer gewohnt sind). Ich persönlich bevorzuge aber die Version mit Klammern.

          Eigentlich geht das ohne Klammern, weil das nunmal die Syntax ist, die uebrigens von C abgeschaut ist, nicht von VB. Du darfst aber gerne um alles Klammern machen, was Du willst, das aendert am Wert nichts: (true) ist dasselbe wie true, und das wird zurueckgegeben.

          Mach mal noch die Funktion
          function funktion_2(variable)
          { status=variable;
            setTimeout("funktion_1('"+variable+"')",1000);
          }
          in dein Script und jetzt den Aufruf mit
          <p><a href="#" onmouseover="funktion_2('Ausgabe');">Link</a></p>
          ohne return, da wirst Du sehen dass ohne _return true_ zunächst eine
          Sekunde lang der Link vom href angezeigt wird (weil der den Text,der
          in funktion_2 mit status=variable gesetzt wurde, wieder überschreibt)
          erst wenn das setTimeout soweit ist (nach 1000 Millisekunden) wird
          nochmal status=variable geschrieben und diesmal bleibts dann stehen.

          Ich schaetze, das Beispiel duerfte verwirrend sein. Man koennte der falschen Annahme unterliegen, dass es an dem 'return true' in funktion_1 liegt, dass der Statustext dann nach 1 sec stehenbleibt. Das ist *in diesem Fall* aber *nicht* so. Das return true hat nur Bedeutung, wenn der Statustext innerhalb eines onmouseover veraendert wird, ansonsten ist es nicht noetig.

          So long

    2. Tach ihr zwei!

      Aufgabenstellung war, dass bei mousever in der Statuszeile ein Text angezeigt wird, und zwar jedesmal bei jedem Link ein anderer.

      Ich hoffe, Dir wurde auch gesagt, das Statuszeilenmanipulation BOESE ist.

      Mein Dozent meinte, er könne es sich nicht erklären, warum es nicht funktioniert, wenn ich das return true direkt in der funktion im head schreibe, anstatt

      Aeh... Dein Dozent weiss das nicht? Er kennt also nicht mal die Grundlagen von JavaScript? Vielleicht suchst Du Dir besser einen anderen. (ernstgemeint!)

      Ich kann mir auch vieles nicht erklären, ich fummel dann einfach so lange rum, bis es klappt.

      Nicht gerade der effektivste Weg. ;-)

      Mußt Du gar nicht jedesmal return(true) schreiben, kannst auch
      return(funktion_1('Ausgabe')) schreiben, wenn Du ein return(true)
      in der funktion_1 machst.

      Genau. Fehlt das return vor dem Funktionsaufruf, gibt der Handler keinen Wert zurueck. Das muss man schon ganz klar sagen. Wieso sollte der Handler das true weiterreichen, wenn man es ihm nicht sagt?

      Also verstehen tu ichs auch nicht, ich hab nur so eine Vermutung:
      also in dem a-tag da können so verschiedene Sachen drinstehen, die ein Browser so machen soll, wenn er da vorbei kommt. Das können auch Events sein, wie z.B. onMouseOver, onMouseDown, onClick, onBlur usw., die alle in einer bestimmten Reihenfolge (nicht die Reihenfolge in der man das da reinschreibt) abgearbeitet werden.

      Naja, gut gemeint, aber der Grund ist ganz einfach, dass es eben so festgelegt ist.
      "You must return true within the event handler if you want to set the status or defaultStatus properties with onMouseOver." (http://developer.netscape.com/docs/manuals/js/client/jsref/handlers.htm#1120822)
      und
      "You can set the status property at any time. You must return true if you want to set the status property in the onMouseOver event handler." (http://developer.netscape.com/docs/manuals/js/client/jsref/window.htm#1203861)

      So long

  2. Aufgabenstellung war, dass bei mousever in der Statuszeile ein Text angezeigt wird, und zwar jedesmal bei jedem Link ein anderer.

    na rattenscharfter Dozent... Rumfrickeln in der Statuszeile ist kriminell. Das is wie Tacho fälschen im Auto. Halt ihm mal einen aktuellen Mozilla unter die Nase - da kann man das blocken - der wird wohl ausflippen beim debuggen :)

    Nach langem hin und her habe ich festgestellt, dass das ganze nur dann funktiert, wenn ich das return true direkt in den anchor einbringe. Mein Dozent meinte, er könne es sich nicht erklären, warum es nicht funktioniert, wenn ich das return true direkt in der funktion im head schreibe, anstatt

    jedesmal im Anchor. Ja, jedenfalls scheint es nicht zu gehn. Meine Frage : Geht es wirklich nicht? Wenn ja, warum muss ich das return true jedesmal neu im Anchor schreiben, gibt es dafür eine sinnvolle erklärung ? Ich will schliesslich nicht nur schreiben, sondern auch verstehen, was ich da tue

    Schule, return.. mir dünkt, da benutzt einer Netscape 4.... und damit sollte man die Frage gleich mal dahin weiterleiten :)