Phil Z.: EvenHandler direkt übergeben ohne extra klick

Hallo,

Ich habe ein JS-Skript bei dem ein Bereich aus-/eingeblendet wird mit diesem Skript:
JS:
function showAll(lnk){lnk = lnk.hash.substr(1) || false
var elm = document.getElementById(lnk)
return !lnk || elm == null ? true : (elm.style.display = elm.style.display == 'block' ? 'none' : 'block') && false}
CSS:
.vis{display:block;}
HTML:
<li><a href="#navBig" onclick="return showAll(this)">-</a></li>
<span id="navBig" class="vis">
Text...
</span>

Der Firefox reagiert leider erst beim zweiten Klick.
Für die Geckos weist man ja beim ersten Klick den event-Handler zu, wohingegen die Funktion für IE gleich "durchgereicht", also aufgerufen wird, nur wie kann ich das umgehen?
Ich will dases direkt aufgerufen wird..

  1. Hallo,

    elm.style.display == 'block'

    ... ergibt false, wenn display noch nicht über das style-Attribut oder eine entsprechende JavaScript-Anweisung gesetzt wurde.

    Frage also besser ab, ob der Wert == "" bzw. andersherum == "none" ist.

    Mathias

    1. Hallo!

      elm.style.display == 'block'

      ... ergibt false, wenn display noch nicht über das style-Attribut oder eine entsprechende JavaScript-Anweisung gesetzt wurde.

      Wurde aber doch!

      CSS:
      .vis{display:block;}

      lg

      Phil

      1. @@Phil Z.:

        elm.style.display == 'block'

        ... ergibt false, wenn display noch nicht über das style-Attribut oder eine entsprechende JavaScript-Anweisung gesetzt wurde.

        Wurde aber doch!

        CSS:
        .vis{display:block;}

        Wo ist da ein style-Attribut oder eine entsprechende JavaScript-Anweisung?

        Live long and prosper,
        Gunnar

        --
        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
        1. Wurde aber doch!

          CSS:
          .vis{display:block;}

          Wo ist da ein style-Attribut oder eine entsprechende JavaScript-Anweisung?

          Hm, ich dachte es war die Angabe der Klasse im CSS Dokument gemeint.
          Ich verstehe nun nicht ganz was gefragt ist, das Skript funktioniert ja.. wenn ich 2 mal Klicke, das muss ich auch nur beim ersten mal, danach geht es immer wie es sein soll..
          klick-> passiert nix(eventhandler wird übergeben),klick -> zeige an, klick -> verstecke, klick->zeige an...usw.. bis die seite reloaded wird..

          Lg

          Phil

          1. Hi,

            Wo ist da ein style-Attribut oder eine entsprechende JavaScript-Anweisung?

            Hm, ich dachte es war die Angabe der Klasse im CSS Dokument gemeint.
            Ich verstehe nun nicht ganz was gefragt ist,

            Du kannst ueber das Style-Unterobjekt nur Werte von Eigenschaften auslesen, die zuvor entweder per Javascript gesetzt, oder per style-Attribut direkt im Element hinterlegt sind. (Ist im Archiv auch schon zahlreich nachzulesen.)

            das Skript funktioniert ja.. wenn ich 2 mal Klicke, das muss ich auch nur beim ersten mal, danach geht es immer wie es sein soll..

            Natuerlich.
            Beim ersten mal ist .style.display == "block" noch *nicht* erfuellt (siehe oben) - also setzt dein Script jetzt "block" explizit.
            Damit ist der Wert jetzt beim zweiten Klick auslesbar - *jetzt* ist .style.display == "block"  erfuellt, also setzt dein Script "none".
            Und danach geht's dann wie von dir erwartet weiter.

            Also mache es so, wie Mathias vorschlug - auf == "none" abfragen.
            Das ist beim ersten Mal natuerlich auch noch nicht erfuellt - aber nicht deshalb, weil du "block" zurueckbekommst , sondern weil du *nichts* zurueckbekommst (siehe oben, again).
            Dann setzt du jetzt also "none", Element ist weg.
            Beim naechsten Klick ergibt Abfrage auf == "none" jetzt true - schliesslich hast du den Wert vorher explizit per Javascript gesetzt - also weisst du dann "block" zu.

            MfG ChrisB

            1. Hi.

              Du kannst ueber das Style-Unterobjekt nur Werte von Eigenschaften auslesen, die zuvor entweder per Javascript gesetzt, oder per style-Attribut direkt im Element hinterlegt sind. (Ist im Archiv auch schon zahlreich nachzulesen.)

              Achso okay.

              Also mache es so, wie Mathias vorschlug - auf == "none" abfragen.

              Ich will aber das dass Element von vorne rein sichtbar ist und man nur die Möglichkeit hat es zu "minimieren".

              Lg

              Phil

              1. Also mache es so, wie Mathias vorschlug - auf == "none" abfragen.

                Ich will aber das dass Element von vorne rein sichtbar ist und man nur die Möglichkeit hat es zu "minimieren".

                Ja und wo ist das Problem?

                Struppi.

              2. Hi,

                Also mache es so, wie Mathias vorschlug - auf == "none" abfragen.

                Ich will aber das dass Element von vorne rein sichtbar ist und man nur die Möglichkeit hat es zu "minimieren".

                Bitte schalte dein Hirn *jetzt* an, und fange an, nachzudenken.

                Element ist sichtbar, du fragst auf =="none" ab.
                Was passiert?
                Diese Abfrage liefert false - warum, habe ich dir bereits ausfuehrlich beschrieben.
                Also setzt du jetzt "none", das urspruenglich sichtbare Element wird ausgeblendet.
                Beim naechsten Aufruf liefert Abfrage auf =="none" true - schliesslich ist das der Wert, der zuvor explizit per Javascript gesetzt wurde. Also setzt du jetzt wieder "block" (oder "", um den Defaultwert der display-Eigenschaft fuer das Element wiederherzustellen - bspw. bei Tabellenelementen, die *nicht* block als display-Wert haben, empfehlenswerter).

                MfG ChrisB