Florian Kirschner: Layer verstecken und wieder anzeigen - Probleme in Netscape

Hallo,

ich habe eine sichtbare ID, und drei unsichtbare. Klick ich in der Navigationsleiste die Hyperlinks an, werden die unsichtbaren aktiviert und der noch zuvor sichtbare ID wird wieder versteckt.

Im IE klappt das hervorragend. Doch Netscape hat Probleme mit dem Verstecken. Es gibt zwar zu Anfang eine Fallunterscheidung:

Eine globale Variable definiert vorerst den sichtbaren Layer der wieder zu verstecken ist. Doch Netscape spielt einfach nicht mit.

Bei den id Containern habe ich die Anfangs unsichtbaren Layer nur mit style="visibility:hidden" versehen, vielleicht liegt ja hier das Problem und ich muß noch eine Netscape spezifische Angabe machen, aber welche??

Hier das Script:

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
v6 = (document.getElementById)? true:false

var sichtbar_id='port1';

function showlayer(layerid)
{ hidelayer(sichtbar_id);
  sichtbar_id=layerid;
  if (ns4) document.layers[layerid].visibility = "show"
   else if (v6) document.getElementById(layerid).style.visibility = "visible";
   else if (ie4) document.all[layerid].style.visibility = "visible"
}

function hidelayer(layerid)
  {
  if (ns4) document.layers[layerid].visibility = "hide"
  else if (v6) document.getElementById(layerid).style.visibility = "hidden";
  else if (ie4) document.all[layerid].style.visibility = "hidden"
  }
//-->
</SCRIPT>

Die Thematik kann unter www.foyo.de --> Portfolio angeguckt werden.

Ich habe schon einmal einen Thread eröffnet, wobei ich die vorgeschlagene Programmierung eingebaut habe, aber irgendwie ist hierbei noch ein Hacken.

Hier der Link zum Thread:

http://forum.de.selfhtml.org/archiv/2002/2/5424/#m30268

  1. Hallo,

    Bei den id Containern habe ich die Anfangs unsichtbaren Layer nur mit style="visibility:hidden" versehen, vielleicht liegt ja hier das Problem und ich muß noch eine Netscape spezifische Angabe machen, aber welche??

    Wenn du den Layer auf visibility:hidden setzt und auf visibility=hide abfragst, kann das nicht funktionieren.
    Machs so, und dann gehts:

    if (ns4) document.layers[layerid].visibility = "visible"
    if (ns4) document.layers[layerid].visibility = "hidden"

    NS4 kennt das. Glaub mir.

    Die Thematik kann unter www.foyo.de --> Portfolio angeguckt werden.

    Da gibts allerdings Error 404: File not found

    Ciao

    W. Pichler

    1. MoiN!

      Wenn du den Layer auf visibility:hidden setzt und auf visibility=hide abfragst, kann das nicht funktionieren.

      Doch, kann es. Und tut es. Bei mir seit langer Zeit.

      Hast du es gerade getestet? Wohl kaum.

      Ich hab nur das Problem, daß mir Netscape abstürzt, wenn ich die fragliche Seite besuche.

      Machs so, und dann gehts:

      ...auch immer noch nicht. >:->

      if (ns4) document.layers[layerid].visibility = "visible"
      if (ns4) document.layers[layerid].visibility = "hidden"

      NS4 kennt das. Glaub mir.

      Hilft bei der Problematik, die wir noch nicht kennen, nicht. Netscape kann es zwar so auch, aber das ändert nichts am Problem.

      - Sven Rautenberg

      1. so, jetzt bin ich zwar ein wenig schlauer als vorher, aber noch ist das Thema nicht aus der Welt geschafft.

        Ich hab den NS 4.78 am Laufen. Die Seite zeigt bei mir alles so wie sie soll, doch kommen wir beim Portfolio an, läßt es sich zwar noch auf Studium klicken, aber bei Praktikas und Kompetenz setzt es einfach aus. Bei Praktikas bringt Netscape den Layer der von Anfang an sichtbar war verschoben nach unten ins Bild und bei Kompetenz rührt sich gar nichts mehr.

        Is es nicht mal wieder ein Bug? Kann mir den keiner zu diesem Problem vorerst helfen? Das mit diesem Vantilator bring ich auch noch ins reine, doch vorerst sollte das Script i.O. gebracht werden.

        Ich bin um jeden Vorschlag dankbar!!

        Gruß

        Florian Kirschner

        1. Re-Moin!

          so, jetzt bin ich zwar ein wenig schlauer als vorher, aber noch ist das Thema nicht aus der Welt geschafft.

          Wir arbeiten daran... :)

          Ich hab den NS 4.78 am Laufen. Die Seite zeigt bei mir alles so wie sie soll, doch kommen wir beim Portfolio an, läßt es sich zwar noch auf Studium klicken, aber bei Praktikas und Kompetenz setzt es einfach aus. Bei Praktikas bringt Netscape den Layer der von Anfang an sichtbar war verschoben nach unten ins Bild und bei Kompetenz rührt sich gar nichts mehr.

          Tja, ich hatte Netscape 4.05 am Laufen, der wollte mit deiner Seite von deinem Server abstürzen und mit der modifizierten Seite von meinem Server diese nicht anzeigen. Grmpf. Aber mit Netscape 4.78 gehts.

          Is es nicht mal wieder ein Bug? Kann mir den keiner zu diesem Problem vorerst helfen? Das mit diesem Vantilator bring ich auch noch ins reine, doch vorerst sollte das Script i.O. gebracht werden.

          Das Script ist super. Ich glaube wirklich, du hast ein Problem mit invalidem HTML. Netscape ist da empfindlich.

          Zwei Fehler sind auffällig:
          1. Du benutzt, vermutlich um einen Absatz zu schaffen, innerhalb der Layer <p></p> - aber das ist so völlig falsch angewandt. Der Validator meckert das an:

          Line 130, column 50:

          ... "1" width="200"><span class="txta5">Ridderstrale<p></p><p></p></span>< ...
                                                                  ^
          Error: element "P" not allowed here; possible cause is an inline element containing a block-level element

          Wenn du da Absatz haben willst, nimm <br>. Und entferne das <p>.

          Viel wichtiger ist aber, daß ein <span> nicht abgeschlossen wird:

          Line 284, column 50:

          ... "txtn1">www.janglednerves.de</span></a><p></p></td>
                                                                  ^

          Error: end tag for "SPAN" omitted; possible causes include a missing end tag, improper nesting of elements, or use of an element where it is not allowed

          Line 284, column 30:

          ...              <td valign="top"><span class="txtn1">2001 Prakt ...
                                          ^

          Error: start tag was here

          Da mußt du ein </span> einfügen. Diese Zeile lautet korrekt so:

          <td valign="top"><span class="txtn1">2001 Praktika bei der Multimedia Agentur jangled nerves GmbH Softwareentwicklung und Projekt Management Assistenz<br></span><a href="http://www.janglednerves.de"><span class="txtn1">www.janglednerves.de</span></a></td>

          Ich hab dann noch per Suchen/Ersetzen jedem Image einen leeren alt-Text gegeben (alt=""), damit die Fehlerliste kürzer wird, und außerdem die Layer aus der Tabelle rausgenommen und ans Ende gestellt. Die Layer werden absolut positioniert, die müssen nicht in der Tabelle drinstehen.

          Also alles vom ersten <div id="port1"> bis zum letzten </div> von Port4 markieren, ausschneiden, und zwischen </table> und </body> wieder einfügen.

          Danach gehts bei mir wunderbar. Ich kann dir nur die geänderte Datei schwerlich zur Verfügung stellen, weil ich alle Grafikreferenzen auf absolute Serverpfade umgestellt hab - du hättest damit wohl mehr Mühe, als wenn du die Änderungen kurz selbst machst.

          - Sven Rautenberg

  2. MoiN!

    Im IE klappt das hervorragend. Doch Netscape hat Probleme mit dem Verstecken. Es gibt zwar zu Anfang eine Fallunterscheidung:

    Eine globale Variable definiert vorerst den sichtbaren Layer der wieder zu verstecken ist. Doch Netscape spielt einfach nicht mit.

    Definiere "Spielt nicht mit". Mein Netscape 4 spielt insofern nicht mit, weil er immer beim Betreten dieser speziellen Seite abstürzt.

    Vielleicht solltest du erstmal die Fehler im Validator korrigieren. Sind zwar nur zwei ernsthafte Verschachtelungsfehler, aber der Netscape ist schon wegen weniger abgestürzt.

    http://validator.w3.org/check?uri=http%3A%2F%2Fwww.foyo.de%2Fcontent2.html&charset=(detect+automatically)&doctype=HTML+4.01+Transitional

    Die Tonnen von 'alt-Text fehlt' kannst du schnell durch Suchen/Ersetzen eliminieren:
    Suchen: '<img '
    Ersetzen durch: '<img alt="" '

    Ach ja, eine DOCTYPE-Angabe erleichtert das Leben:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    - Sven Rautenberg

    1. hi

      Definiere "Spielt nicht mit". Mein Netscape 4 spielt insofern nicht mit, weil er immer beim Betreten dieser speziellen Seite abstürzt.

      Vielleicht solltest du erstmal die Fehler im Validator korrigieren. Sind zwar nur zwei ernsthafte Verschachtelungsfehler, aber der Netscape ist schon wegen weniger abgestürzt.

      inklusive schlechter Laune :)

      .. ich habe es mal ohne JS geschafft eine Seite zu produzieren, die in Netscrap bei jedem Reload anders aussah...

  3. Hallo,

    function showlayer(layerid)
    { hidelayer(sichtbar_id);
      sichtbar_id=layerid;
      if (ns4) document.layers[layerid].visibility = "show"
       else if (v6) document.getElementById(layerid).style.visibility = "visible";
       else if (ie4) document.all[layerid].style.visibility = "visible"
    }

    Gleichheitsabfragen erfolgen mit ==.

    MfG, Thomas

    1. Nachtrag:

      Gleichheitsabfragen erfolgen mit ==.

      Sorry, da wahr ich zu schnell. Die =-Zeichen beziehen sich ja auf die Zuweisung.

      MfG, Thomas

  4. Hallo,

    ich habe eine sichtbare ID, und drei unsichtbare. Klick ich in der Navigationsleiste die Hyperlinks an, werden die unsichtbaren aktiviert und der noch zuvor sichtbare ID wird wieder versteckt.

    Im IE klappt das hervorragend. Doch Netscape hat Probleme mit dem Verstecken. Es gibt zwar zu Anfang eine Fallunterscheidung:

    Is ja klar kann ja nicht gehen: Die Layer sehen vermutlich so aus:

    <div id="erster"

    Und ansprechen tust du die Layer mit der alten Layer-Syntax: document.layers[layerid]..,die aber nur dafür geeignet ist, wenn du auch <layer> definierst.

    Sprich im NS 4 die Layer so an: document.erster. usw. und dann gehts 100%ig.

    Ciao

    W. Pichler

    1. MoiN!

      Is ja klar kann ja nicht gehen: Die Layer sehen vermutlich so aus:

      <div id="erster"

      Und ansprechen tust du die Layer mit der alten Layer-Syntax: document.layers[layerid]..,die aber nur dafür geeignet ist, wenn du auch <layer> definierst.

      <img src="http://www.rtbg.de/images/fresse.gif" border=0 alt="">

      Netscape braucht keine <layer>, Netscape kann auch <div id="eineID">, aber dann bitteschön positioniert mit "position:absolute". (Alles andere würde nicht unbedingt Sinn machen.

      Sprich im NS 4 die Layer so an: document.erster. usw. und dann gehts 100%ig.

      Was spricht gegen document.layers['eineID']?

      - Sven Rautenberg

      1. hi

        <img src="http://www.rtbg.de/images/fresse.gif" border=0 alt="">

        ich find' den Pinguin des berüchtigten Videos witziger :)

    2. Hallo,

      Und ansprechen tust du die Layer mit der alten Layer-Syntax: document.layers[layerid]..,die aber nur dafür geeignet ist, wenn du auch <layer> definierst.

      Nein, positionierte DIVs oder TDs werden auch in die document.layers-Collection aufgenommen, siehe z. B.:
      http://www.styleassistant.de/tips/beispiel27a.htm
      oder
      http://www.styleassistant.de/tips/beispiel40.htm.

      MfG, Thomas

      1. Hallo,

        Und ansprechen tust du die Layer mit der alten Layer-Syntax: document.layers[layerid]..,die aber nur dafür geeignet ist, wenn du auch <layer> definierst.

        Nein, positionierte DIVs oder TDs werden auch in die document.layers-Collection aufgenommen, siehe z. B.:
        http://www.styleassistant.de/tips/beispiel27a.htm
        oder
        http://www.styleassistant.de/tips/beispiel40.htm.

        Dabei wird ein 'Trick' angewendet:

        Erstens wird eine lokale Variable definiert: function ZeigeEbene(Nr)

        Als Argument übergibst du die an die einzelnen Layer wiederum über eine Variable:

        ebenenref="ebene"+Nr;

        Vollständig kompatibel würden die <div> zu <layer> dann, wenn du sie folgendermaßen definieren könntest:

        document.layers[Nr].visibility="visible";

        Glaube ich aber nicht, dass das so klappt.

        Ciao

        W. Pichler

        1. Hallo,

          Dabei wird ein 'Trick' angewendet:

          Erstens wird eine lokale Variable definiert: function ZeigeEbene(Nr)

          Als Argument übergibst du die an die einzelnen Layer wiederum über eine Variable:

          ebenenref="ebene"+Nr;

          Vollständig kompatibel würden die <div> zu <layer> dann, wenn du sie folgendermaßen definieren könntest:

          document.layers[Nr].visibility="visible";

          Glaube ich aber nicht, dass das so klappt.

          Doch, das klappt genau so. Ich kann alternativ definieren:

          function ZeigeEbene(Nr)
          {
            ebenenref=Nr-1;
            if (document.layers) // NN 4.x
            {
              document.layers[ebenenref].visibility="visible";
            }
          }

          Also ist im Beispiel document.layers[0] mit document.layers["ebene1"] identisch und das meinte ich ja mit der Aussage bzgl. der document.layers-Collection.

          MfG, Thomas

    3. <div id="erster"

      Und ansprechen tust du die Layer mit der alten Layer-Syntax: document.layers[layerid]..,die aber nur dafür geeignet ist, wenn du auch <layer> definierst.

      Sprich im NS 4 die Layer so an: document.erster. usw. und dann gehts 100%ig.

      Noch was wichtiges vergessen: Im NS 4 auf jeden Fall ohne style.

      Jetzt aber vollständig: if (ns4) document.erster.visibility = "hide";

      Und mein lieber Sven Rautenberg: Wie wärs, wenn die Win-Arsch mal selber deine nichtswissende Schleimer-Fresse halten würdest?

      Ciao

      W. Pichler

      1. MoiN!

        Und mein lieber Sven Rautenberg: Wie wärs, wenn die Win-Arsch mal selber deine nichtswissende Schleimer-Fresse halten würdest?

        Du erzählst hier einfach falsche Tatsachen. Netscape 4 kennt <div> und benutzt sie genau wie <layer>. Daran führt nunmal kein Weg vorbei. Insofern führt dein Posting nicht zu einer Lösung des Problems.

        Über die persönliche Beleidigung gehe ich mal ohne viel Aufhebens hinweg. Freunde machst du dir damit aber ganz sicher nicht.

        - Sven Rautenberg

        1. MoiN!

          Und mein lieber Sven Rautenberg: Wie wärs, wenn die Win-Arsch mal selber deine nichtswissende Schleimer-Fresse halten würdest?

          Du erzählst hier einfach falsche Tatsachen. Netscape 4 kennt <div> und benutzt sie genau wie <layer>. Daran führt nunmal kein Weg vorbei. Insofern führt dein Posting nicht zu einer Lösung des Problems.

          Ich habe nie was anderes behauptet. Außer dass man die <div> in NS 4 nicht über <layer[id] .. ansprechen darf. Du drehst das nur so hin, wie du's gebrauchen willst.

          Über die persönliche Beleidigung gehe ich mal ohne viel Aufhebens hinweg. Freunde machst du dir damit aber ganz sicher nicht.

          Ich nehme mal stark an, dass man auf deine Freundschaft getrost verzichten kann.

          Ciao

          W. Pichler

      2. Hi,

        Und mein lieber Sven Rautenberg: Wie wärs, wenn die
        Win-Arsch mal selber deine nichtswissende Schleimer-
        Fresse halten würdest?

        hoppla.

        Glaubst Du tatsächlich, mit dieser Art der Selbstdarstellung bei zivilisierten Menschen große Mengen an Bonuspunkten zu erzielen?

        Mit etwas weniger herzlichen Grüßen
            Michael

        1. Hi,

          Und mein lieber Sven Rautenberg: Wie wärs, wenn die
          Win-Arsch mal selber deine nichtswissende Schleimer-
          Fresse halten würdest?

          hoppla.

          Glaubst Du tatsächlich, mit dieser Art der Selbstdarstellung bei zivilisierten Menschen große Mengen an Bonuspunkten zu erzielen?

          Pahh, dass ich nicht lache. Einfach so tun, als ob ihr Zivilisiertheit gepachtet hättet. Ihr solltet mal auf mehr eure eigene Selbstdarstellung achten. Da ist nämlich sowas institutionalisiert:

          <img src="http://www.rtbg.de/images/fresse.gif" border=0 alt="">

          Also besser zuerst mal selbstkritikfähig werden.

          Ciao

          W. Pichler