Cheatah: JavaScript-Aufruf ohne a href?

Hallo,

in meinem neuen Menu rufe ich diverse JavaScript-Funktionen auf, die dann Untermenus aufklappen. Das geht ja problemlos mit <a href=javascript:funktion()>. Nur wird dabei (da target=_self) leider immer das Laden der aktuellen Seite und der Grafiken darin unterbrochen.

Bisher habe ich mich beholfen, indem ich statt eines Links einfach einen Formularbutton mit onClick=funktion() benutzt habe; hierbei wird das Laden nämlich nicht unterbrochen. Nun will ich aber noch onMouseOver-Effekte mit einbeziehen. Mit einem <input type=image> funktioniert das aber (zumindest unter Netscape) leider nicht. Gibt es eine Lösung?

Cheatah

  1. Hallo Cheatah,

    Bisher habe ich mich beholfen, indem ich statt eines Links einfach einen Formularbutton mit onClick=funktion() benutzt habe; hierbei wird das Laden nämlich nicht unterbrochen. Nun will ich aber noch onMouseOver-Effekte mit einbeziehen. Mit einem <input type=image> funktioniert das aber (zumindest unter Netscape) leider nicht. Gibt es eine Lösung?

    Laut HTML 4.0 und auch beim MS IE ist es so, dass man Event-Handler wie onClick und onMouseover in jedem HTML-Tag notieren kann, wo es Sinn macht, also etwa <p onclick="Funktion()" onMouseover="Sonstwas()">Text</p>. Leider koennen wir all diese sinnvollen Sachen in der Praxis nicht verwenden, weil Netscape, auch in V4.5, sich standhaft weigert, diese Dinge zu implementieren.

    Bei Images brauchst Du ebenfalls <a hrefs>, um Netscape onClick oder onMouseover zu einen JS-Aufruf zu bewegen. Das einzige andere HTML-Tag, was evtl. in Frage kommt, waere noch das <area>-Tag. Da sind naemlich auch bei Netscape onClick und onMouseover moeglich. Du koenntest also etwa die gesamte Grafik als ein clikable-Bereich eines Image-Maps definieren und in dem zugehoerigen <area>-Tag Dein onClick und onMouseover notieren.
    Inwieweit <area> andere Auswirkungen auf das Laden der aktuellen Seite hat als <a>, weiss ich allerdings nicht...

    viele Gruesse
      Stefan Muenz

    1. Hi Stefan,

      Laut HTML 4.0 und auch beim MS IE ist es so, dass man Event-Handler wie onClick und onMouseover in jedem HTML-Tag notieren kann, wo es Sinn macht, also etwa <p onclick="Funktion()" onMouseover="Sonstwas()">Text</p>. Leider koennen wir all diese sinnvollen Sachen in der Praxis nicht verwenden, weil Netscape, auch in V4.5, sich standhaft weigert, diese Dinge zu implementieren.

      hoffen wir mal, daß AOL den Navigator in diesen Dingen etwas verbessert ;-)

      Bei Images brauchst Du ebenfalls <a hrefs>, um Netscape onClick oder onMouseover zu einen JS-Aufruf zu bewegen. Das einzige andere HTML-Tag, was evtl. in Frage kommt, waere noch das <area>-Tag. Da sind naemlich auch bei Netscape onClick und onMouseover moeglich. Du koenntest also etwa die gesamte Grafik als ein clikable-Bereich eines Image-Maps definieren und in dem zugehoerigen <area>-Tag Dein onClick und onMouseover notieren.

      Kann man map's denn auch mit <input type=image> kombinieren? Ich habe jetzt keine Lust das auszuprobieren, weil mir Chrissies Lösung schon geholfen hat... :-)

      Inwieweit <area> andere Auswirkungen auf das Laden der aktuellen Seite hat als <a>, weiss ich allerdings nicht...

      Ich schätze mal, daß Netscape eine <area> einfach als <a> interpretiert. Immerhin muß man dort ja auch href= spezifizieren. Auf jeden Fall danke für die Idee, vielleicht probiere ich es in einem Moment der Muße mal aus :-) In dem Fall werde ich meine Ergebnisse hier posten!

      Cheatah

  2. Hallo,

    in meinem neuen Menu rufe ich diverse JavaScript-Funktionen auf, die dann Untermenus aufklappen. Das geht ja problemlos mit <a href=javascript:funktion()>. Nur wird dabei (da target=_self) leider immer das Laden der aktuellen Seite und der Grafiken darin unterbrochen.

    Und warum nicht:
    <A HREF='#' onclick="funktion()";return false"> ?
    Wenn ich Deine Frage richtig verstehe, dann sollte es das sein.
    Statt '#' kannst Du auch was anderes einsetzen.

    Nun will ich aber noch onMouseOver-Effekte mit einbeziehen. Mit

    einem <input type=image> funktioniert das aber (zumindest unter Netscape) leider nicht.

    Nein, funtkioniert nicht, weil <input type=image> kein Image-Objekt ist (wird leicht verwechselt, sieht sich so aehnlich)
    Nimm statt dessen ein normales Image-Objekt mit einem Link drumherum:
    <A HREF...><IMG...></A>

    Christine

    1. Hi,

      <A HREF='#' onclick="funktion()";return false"> ?
      Wenn ich Deine Frage richtig verstehe, dann sollte es das sein.

      das isses :-)
      Solche Experimente habe ich früher irgendwann schon mal gemacht, es hat bloß den Nachteil, daß in der History dann die Seite doppelt auftaucht (mit und ohne #). Wirkt ein wenig merkwürdig, wenn man dann mit dem Back-Button zurückgehen will.
      Hat es eigentlich irgendwelche Auswirkungen, wenn man "return false" wegläßt?

      Statt '#' kannst Du auch was anderes einsetzen.

      Was denn zum Beispiel?

      Nein, funtkioniert nicht, weil <input type=image> kein Image-Objekt ist (wird leicht verwechselt, sieht sich so aehnlich)

      Ich hatte schon vermutet, daß es nicht geht, aber man probiert ja alles :-)

      Nimm statt dessen ein normales Image-Objekt mit einem Link drumherum:
      <A HREF...><IMG...></A>

      Danke, so weit bin ich gerade noch alleine gekommen *grins* ;-)

      Auf jeden Fall klappt es mit Deiner Methode. Danke schön!

      Cheatah

      1. Hi nochmal,

        <A HREF='#' onclick="funktion()";return false"> ?

        das hat (neben dem Back-Button-Effekt) noch einen weiteren Nachteil. Wenn ich nun die Seite schon nach unten gescrollt hatte, lande ich beim Klicken auf den Link wieder ganz oben, was ich als ziemlich störend empfinde. Gibt es also noch etwas anderes?

        Cheatah

        1. <A HREF='#' onclick="funktion()";return false"> ?
          das hat (neben dem Back-Button-Effekt) noch einen weiteren Nachteil. Wenn ich nun die Seite schon nach unten gescrollt hatte, lande ich beim Klicken auf den Link wieder ganz oben, was ich als ziemlich störend empfinde. Gibt es also noch etwas anderes?

          Das duerfte eigentlich nicht passieren.
          Ich sehe da gerade einen Tippfehler von mir. Verflixt.
          Hast Du den mit abgeschrieben? :-(
          Da sind zu viele Anfuehrungszeichen, muss heissen:
            <A HREF='#' onclick="funktion();return false">

          Dann  bewirkt das return false naemlich, dass der Link gar nicht ausgefuehrt wird,
          also duerfte Dein history-Problem damit eigentlich nicht entstehen.
          Nur JS1.0-Browser werten das nicht aus.
          Mit Tippfehler klappt das allerdings gewiss nicht, da steht return false dann _hinter_ der auszufuehrenden Anweisung.
          Ich bitte um Entschuldigung.

          Was man noch machen kann?
             <A HREF="javascript:void()" onclick="funktion()";return false">
          oder
             function nichts()
             {}
             ...
             <A HREF="javascript:nichts()" onclick="funktion()";return false">
          Dann kannst Du das return false auch weglassen.

          Christine

          1. <A HREF='#' onclick="funktion()";return false"> ?
            das hat (neben dem Back-Button-Effekt) noch einen weiteren Nachteil. Wenn ich nun die Seite schon nach unten gescrollt hatte, lande ich beim Klicken auf den Link wieder ganz oben, was ich als ziemlich störend empfinde. Gibt es also noch etwas anderes?

            Das duerfte eigentlich nicht passieren.

            Ich denke, der NS versucht das als Sprungziel innerhalb des aktuellen Dokuments auszuwerten. Und wir hatten ja schon mal festgestellt, dass er an den Seitenanfang springt, wenn der das Ziel nicht findet, im Gegensatz zu IE, der dann garnichts tut. Aber das duerfte sowieso egal sein, denn wenn dann das "return false;" innerhalb der Anfuehrungszeichen steht, muesste die Ausfuehrung des Sprungs doch abgebrochen werden, oder?

            Was man noch machen kann?
               <A HREF="javascript:void()" onclick="funktion()";return false">
            oder
               function nichts()
               {}
               ...
               <A HREF="javascript:nichts()" onclick="funktion()";return false">

            (Da ist schon wieder der Tippfehler drin.)
            Bei alledem ist mir noch nicht klar, warum man den Funktionsaufruf nicht direkt bei HREF hinschreiben kann. Was hat das mit TARGET=_self zu tun?

            1. Hi,

              Ich denke, der NS versucht das als Sprungziel innerhalb des aktuellen Dokuments auszuwerten. Und wir hatten ja schon mal festgestellt, dass er an den Seitenanfang springt, wenn der das Ziel nicht findet, im Gegensatz zu IE, der dann garnichts tut. Aber das duerfte sowieso egal sein, denn wenn dann das "return false;" innerhalb der Anfuehrungszeichen steht, muesste die Ausfuehrung des Sprungs doch abgebrochen werden, oder?

              das probiere ich gleich aus... ich habe nämlich das return false glatt vergessen :-) Eigentlich wollte ich nur ausprobieren, ob es dann nicht funktioniert, aber so schleifen sich Fehler nun mal ein ;-)
              Also, mit dem return false läuft es problemlos. Danke noch mal allen beteiligten!

              Bei alledem ist mir noch nicht klar, warum man den Funktionsaufruf nicht direkt bei HREF hinschreiben kann. Was hat das mit TARGET=_self zu tun?

              Wegen target=_self denkt der Browser, die aktuelle Seite würde durch eine neue ersetzt werden und unterbricht den Ladevorgang. Drum halt :-)

              Cheatah