Freddy: Verständnisproblem: Return bei JS

Hallo,

was Return bewirkt ist mir bekannt. Allerdings ist für micht die
Schreibweise in JavaScript ungewohnt.
Mich würde interessieren was das "return true;" in dieser
Anweisung bewirkt
<a href="datei.htm" onmouseover="status='Das ist ein Verweis';return true;">Verweis</a>
Siehe:
http://de.selfhtml.org/javascript/objekte/window.htm#status
Zu dem Beispiel dort wird ja auch geschrieben das es wichtig ist bei solchen Konstrukten die Anweisung return true am Ende anzugeben.
Kann mir jemand erklären wieso?

Danke schonmal!

  1. Moin,

    <a href="datei.htm" onmouseover="status='Das ist ein Verweis';return true;">Verweis</a>

    Afaik, sagst Du mit "return true" der JavaScript-Engine, dass das Event "onmouseover" bereits abgearbeitet wurde, und nicht mehr weiterverarbeitet werden soll.

    Gruesse,
    Joerg

    1. Moin,

      <a href="datei.htm" onmouseover="status='Das ist ein Verweis';return true;">Verweis</a>

      Afaik, sagst Du mit "return true" der JavaScript-Engine, dass das Event "onmouseover" bereits abgearbeitet wurde, und nicht mehr weiterverarbeitet werden soll.

      Gruesse,
      Joerg

      Thx

    2. Hi,

      Moin,

      <a href="datei.htm" onmouseover="status='Das ist ein Verweis';return true;">Verweis</a>

      Afaik, sagst Du mit "return true" der JavaScript-Engine, dass das Event "onmouseover" bereits abgearbeitet wurde, und nicht mehr weiterverarbeitet werden soll.

      nein. Das ist hier nur die halbe Wahrheit und verschweigt das wichtigste.
      return beendet eine Javascriptfunktion. Der Rückgabewert ist in diesem Fall jedoch entscheidend.
      Bei false würde der HTML-Link nicht mehr ausgeführt, bei true schon.

      Beim Öffnen eines Popups über onclick sollte das Script jedoch false zurückliefern, da in diesem Fall - bei korrektem Öffnen des Popups - dem HTML-Link eben nicht gefolgt werden soll.

      freundliche Grüße
      Ingo

      1. hi,

        <a href="datei.htm" onmouseover="status='Das ist ein Verweis';return true;">Verweis</a>

        return beendet eine Javascriptfunktion. Der Rückgabewert ist in diesem Fall jedoch entscheidend.
        Bei false würde der HTML-Link nicht mehr ausgeführt, bei true schon.

        der event in diesen beispiel ist onmouseover, hat also mit der ausführung des links nichts zu tun.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. Moin nochmal,

          der event in diesen beispiel ist onmouseover, hat also mit der ausführung des links nichts zu tun.

          seh ich eigentlich auch so.
          Wie ich das verstehe, ist es doch so:

          Bei einem normalen Überfahren eines Links (ohne dass ein "onmouseover" gesetzt wird), wird ja bei den meisten Browsern der Link in der Statuszeile angezeigt.

          Wenn ich im Beispiel oben einen onmouseover-Handler setze, und KEIN true zurückliefere, passiert imO folgendes

          Überfahren des Links
          onmouseover wird getriggert -> Statuszeile: "Dies ist ein Verweis"
          Default-Verhalten vom Browser wird getriggert: Statuszeile: "datei.htm"

          Ich würde also den Effekt gar nicht beobachten können, weil die Statuszeile sofort durch das Default-Event-Handling des Browsers überschrieben würde.

          Durch Rückgeben von "true" teile ich dem Browser mit, dass ich das Event "überfahre Link" bereits mit "onmouseover" abgefangen und verarbeitet habe, sodaß seine Standard-Aktion ("Einblenden der referenzierten Datei") nicht mehr ausgeführt wird.

          Oder versteh ich da das Eventmodell falsch?

          Gruesse,
          Joerg

          1. hi,

            Ich würde also den Effekt gar nicht beobachten können, weil die Statuszeile sofort durch das Default-Event-Handling des Browsers überschrieben würde.

            ja, scheint mir korrekt.

            Durch Rückgeben von "true" teile ich dem Browser mit, dass ich das Event "überfahre Link" bereits mit "onmouseover" abgefangen und verarbeitet habe, sodaß seine Standard-Aktion ("Einblenden der referenzierten Datei") nicht mehr ausgeführt wird.

            Oder versteh ich da das Eventmodell falsch?

            weiß ich nicht - ich finde es nur unkonsequent an dieser stelle.

            wenn ich beispielsweise beim abschicken eines formulars das standard-handling - also das absenden des request an das per action angebene ziel - im onSubmit-handler abbrechen will, muss ich dort _false_ zurückgeben, um die weitere abarbeitung des events "submit-button wurde geklickt" bzw. "formular wurde per enter abgeschickt" zu unterbrechen.

            warum das bei der onmouseover/window.status-geschichte genau anders herum ist, will mir auf den ersten blick nicht einleuchten.

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
            1. Hi,

              warum das bei der onmouseover/window.status-geschichte genau anders herum ist, will mir auf den ersten blick nicht einleuchten.

              stimmt. Noch seltsamer wird es bei onclick in einem seiteninternen Link auf "#".
              Mit false wird der Statustext dauerhaft geändert (die HTML-Funktion wie bei onsubmit nicht ausgeführt), mit true (nach dem Ankersprung) jedoch nur solange die Maus außerhalb des Links ist.

              freundliche Grüße
              Ingo

          2. Hi,

            Wenn ich im Beispiel oben einen onmouseover-Handler setze, und KEIN true zurückliefere, passiert imO folgendes
            Überfahren des Links
            onmouseover wird getriggert -> Statuszeile: "Dies ist ein Verweis"
            Default-Verhalten vom Browser wird getriggert: Statuszeile: "datei.htm"

            Fast richtig.
            Überfahren des Links
            onmouseover wird getriggert -> der Javascript-Interpreter sieht in der Konfiguration, daß vom User das Überschreiben der Statuszeile per Javascript verboten wurde.
            Default-Verhalten vom Browser wird getriggert: Statuszeile: "datei.htm"

            ;-) SCNR

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.