Problem mit getElementById und layern im IE

con-f-use

Erfahrenes Mitglied
Hallo, ich hab eine kleine Javascript-Uhr programmiert und wollte, dass sie auch in Netscape 4.0, also habe ich layer verwedet. Hier mal der Source:
HTML:
<html><head><title>JavaScript-Uhr</title><meta name="AUTHOR" content="con-f-use@gmx.net">
    
    <link rel="StyleSheet" type="text/css" href="../../style.css">
    
    <script language="JavaScript">
    
    	window.onload=clock
    
    	function clock(){
    
    		var today = new Date()
    		var	h = today.getHours(),
    			m = today.getMinutes(),
    			s = today.getSeconds()
    
 		var display = ((h<10) ? "0" : "") + h + ((m<10) ? ":0" : ":") + m + ((s<10) ? ":0" : ":") + s;
 		if (document.getElementById) document.getElementById("clock").innerHTML = display
 			 else if (document.all) document.all.clock.innerHTML = display;
    				else if (document.layers) {
 				 document.layers["clock"].document.clear();
 				 document.layers["clock"].document.write(display);
 				 document.layers["clock"].document.close();
    				}
    
    		setTimeout("clock()", 1000)
    
    	}//clock()
    
    </script>
    
    </head><body>
    
    	<layer id="clock">Fehler</layer>
    
    </body></html>
In Netscape 4.0 bis 7.2 sowie im Moziall und in Opera läuft sie einwandfrei nur der IE macht mal wieder Mucken und sagt mir irgenwas von "Unbekannter Laufzeitfehler". Wenn ich statt des "clock"-layers jetzt was anderes verwende, z.B. einen <p>-Tag mir der id "clock" es im IE einwandfrei, aber ich kann's halt in Netscape 4 nicht benutzten. Kann mir jemand helfen?

Klar ich hab auch schon einen Workaround indem ich den layer noch in nen anderen Tag einschließe (id="Clock"), den dann der IE ansprechen kann:
HTML:
<p id="Clock"><layer id="clock">Fehler</layer></p>
Aber das sieht man wieder im Quellcode und mach so nen schlechten Eindruck, außerdem ist das meiner Meinung nach ein schwerwiegender IE-Bug, wenn er keine layer ansprechen kann.
 
Zuletzt bearbeitet:
... das ist kein Bug im IE. Das Layer-Element ist Netscape-Proprietär und sollte eigentlich nicht mehr verwendet werden. In modernen Browsern solltest Du statt dessen DIV-Elemente verwenden. Da Du sowieso JavaScript verwendest, könntest Du zu Beginn eine Browserweiche einbauen und bei NS4 Layer in die Seite schreiben (document.write) - bei allen anderen Browsern eben DIVs.

Gruß
.
 
Für NN4 kannst du auch ein <div> nehmen.
Du musst ihm lediglich ein Dummie-Positionsangabe verpassen:
Code:
<div style="position:relative;">...</div>

.... und NN4 sieht dies als eine Art Pseudo-Layer an, der zwar nicht alle Eigenschaften eines echten <layer>'s besitzt... für dein Anliegen ist es aber ausreichend.
Statt einem <div> geht dasauch mit beliebigen anderen Seitenelementen.
 
@Sven: Oh - man lernt doch nie aus :)

By the way: akzeptiert NN4 denn auch asolute Positionsangaben mit CSS bei DIVs (inklusive z-index)? (Habe grade keinen zum Testen da und Du sagst ja selbst, er akzeptiert nicht alle Eigenschaften eines "echten" Layers...)

Gruß
.
 
Also danke erstma, netter Trick muss ich schon sagen. Mit dem Trick funktioniert's aber leider auch nicht so, wie's soll, denn er aktualierst zwar den Inhalt des divs, aber nur genau ein mal und zeigt dann gar nichts mehr an. Vielleicht da noch ne Lösung?
 
@con-f-use
das mit dem write() darfst du nur mit NN4 machen...bei den anderen Browsern musst du die innerHTML-Variante nehmen(sofern sie das kennen.... ist schliesslich kein Standard-JS-Bestandteil)

@Datic... jo, CSS ist ja nicht an bestimmte Elemente gebunden.
Ich meinte damit vielmehr eine Reihe von Layer-spezifischen HTML-Eigenschaften...above,clip usw.
Mit Position-absolute würde ein Element auch zu so einem Pseudo-Layer werden... ist egal, welche Positionsangabe(solange es eine "echte" ist)... das "relative" macht sich nur besser, weil es die tatsächliche Position des <div> nicht ändert.
 
@Sven
@con-f-use
das mit dem write() darfst du nur mit NN4 machen...bei den anderen Browsern musst du die innerHTML-Variante nehmen(sofern sie das kennen.... ist schliesslich kein Standard-JS-Bestandteil)
Ist mir schon klar, geht ja auch aus dem Quellcode hervor, dass ich das nur beim NN mache. Das einzige, was ich vänderht hab ist, dass ich den layer durch einen div mit deiner Positionsangabe ersetzt hab. Wie gesagt: die erste Aktualisierung klapp einwandfrei, aber dann wird kein Ihnhalt mehr angezeigt....
 
Oh, ja...ich jetzt sehe ich es

Nehme mal doch lieber "position:absolute":-(

Mit "relative" scheint das Ding irgendwo herumzueiern(man sieht es immer mal kurz, wenn man die Fenstergrösse ändert)
 
Ha, perfekt, danke.
Sag mal wie lang machst du das eigentlich schon, du hast echt zu jedem Problem ne Lösung oder liegt's nur dran, dass ich mich erst seit kurzem mit JS beschäftige?
 
Zurück