Layer verstecken und wieder anzeigen - Probleme in Netscape
Florian Kirschner
- dhtml
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
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
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
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
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
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.
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
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...
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
Nachtrag:
Gleichheitsabfragen erfolgen mit ==.
Sorry, da wahr ich zu schnell. Die =-Zeichen beziehen sich ja auf die Zuweisung.
MfG, Thomas
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
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
hi
<img src="http://www.rtbg.de/images/fresse.gif" border=0 alt="">
ich find' den Pinguin des berüchtigten Videos witziger :)
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
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
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
<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
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
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
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
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