Netscape
systom
- javascript
Hallo,
ich versuche eine Tabellenzelle so zu konfigurieren, dass beim Mousover die Hintergrundfarbe geändert wird. Wenn ich den <a href...> in die Zelle schreibe gilt der Mouseover nur bis zu Ende des Zelleninhaltes. Es soll aber auch funktionieren wenn die Zelle leer ist. Im Explorer funktioniert das super nur im Netscape nicht. Was mache ich falsch?
Das Javascript (ausgelagert):
function farbe_zelle(id,farbe) {
if (document.all)
document.all[id].style.backgroundColor=farbe;
else
if (document.getElementById)
document.getElementById(id).style.backgroundColor=farbe;
else
if (document.layers)
document.layers[id].bgColor=farbe;
}
Die Tabellenzelle:
<a href="formel1.php" target="_self"
onMouseOver="farbe_zelle('Zelle1','#6386C7')"
onMouseOut="farbe_zelle('Zelle1','#2C4F90')">
<td id="Zelle1" style="position:relative" bgcolor="#2C4F90">
<font face="Arial" size="-1">Formel 1</font>
</td>
</a>
Danke schon mal im Voraus.
Tom
Hallo,
ich versuche eine Tabellenzelle so zu konfigurieren, dass beim Mousover die Hintergrundfarbe geändert wird. Wenn ich den <a href...> in die Zelle schreibe gilt der Mouseover nur bis zu Ende des Zelleninhaltes. Es soll aber auch funktionieren wenn die Zelle leer ist. Im Explorer funktioniert das super nur im Netscape nicht. Was mache ich falsch?
Das Javascript (ausgelagert):
function farbe_zelle(id,farbe) {
if (document.all)
document.all[id].style.backgroundColor=farbe;
else
if (document.getElementById)
document.getElementById(id).style.backgroundColor=farbe;
else
if (document.layers)
document.layers[id].bgColor=farbe;
}Die Tabellenzelle:
<a href="formel1.php" target="_self"
onMouseOver="farbe_zelle('Zelle1','#6386C7')"
onMouseOut="farbe_zelle('Zelle1','#2C4F90')"><td id="Zelle1" style="position:relative" bgcolor="#2C4F90">
<font face="Arial" size="-1">Formel 1</font>
</td>
</a>
Danke schon mal im Voraus.
Tom
Die CSS Struktur stimmt leider nicht überein, Du musst also browserabhängig reagieren (NS kennt z.B. "style" nicht).
Der beste Weg (hab ich mal bei Macromedia gelernt) ist, abhängig vom Browser Scriptvariablen zu setzen und diese dann mit eval() aufzulösen.
Beispiel (nicht getestet aber so funktioniert das Prinzip):
// Browserabhängig initialisieren
function init(){
if (navigator.appName == "Netscape") {
var layerRef="document.layers";
var styleSwitch="";
}else{
var layerRef="document.all";
var styleSwitch=".style";
}
}
// Variablen mit eval() verwenden
function farbe_zelle(id,farbe) {
eval(layerRef+'["'+id+'"]'+styleSwitch+'.background-color="'+farbe+'"');
}
Danke erst mal. Hab aber noch nicht ganz verstanden. Muß ich außer dem Script noch was anderes beachten.
Tom
Hallo,
Die CSS Struktur stimmt leider nicht überein, Du musst also browserabhängig reagieren (NS kennt z.B. "style" nicht).
Das ist Quatsch. Dir ist bekannt, daß die aktuelle Netscape-Version 7.0 ist?
Der beste Weg (hab ich mal bei Macromedia gelernt) ist, abhängig vom Browser Scriptvariablen zu setzen und diese dann mit eval() aufzulösen.
Besser nie was von Macromedia abschauen ;-)
Das Script von Tom ist wesentlich besser und funktioniert auch auf moderen Browsern, die nicht IE heißen. Außerdem ist eval() evil, und sollte nur verwendet werden, wenn es nicht anders geht.
Beispiel (nicht getestet aber so funktioniert das Prinzip):
// Browserabhängig initialisieren
function init(){
if (navigator.appName == "Netscape") {
Funktioniert nur, wenn sich der Browser auch unter seinem richtigen Namen ausgibt, und das muß nicht sein.
var layerRef="document.layers";
NS7 wird in appName auch 'Netscape' stehen haben, document.layers kennt er trotzdem nicht (auch nicht document.all), wohl aber document.getElementById
var styleSwitch="";
}else{
var layerRef="document.all";
var styleSwitch=".style";
}
Es gibt auch andere,bessere Browser als NS4 und IE.
Bei neuen Netscapes und Mozilla dürfte das Script komplett versagen und eine Fehlermeldung bringen.
}
// Variablen mit eval() verwenden
function farbe_zelle(id,farbe) {
eval(layerRef+'["'+id+'"]'+styleSwitch+'.background-color="'+farbe+'"');
^
das wird nicht funktionieren
}
Ich empfehle dringend:
http://selfhtml.teamone.de/dhtml/modelle/index.htm
Gruß, Jan
Hallo,
Ich denke das Script ist soweit ok. Das Problem liegt im HTML-Teil.
Eine Tabellenzelle darf m.E. nicht innerhalb von <a href=".."> </a> liegen.
versuch das mal mit (nicht getestet):
<td id="Zelle1" style="background: #2c4f90; cursor: pointer;" onMouseOver="farbe_zelle('Zelle1','#6386C7');" onMouseOut="farbe_zelle('Zelle1','#2C4F90');" onClick="window.location.href='formel1.php';">
<a href="formel1.php">Formel 1</a>
</td>
Keine Ahnung, ob NS4 da mitmacht.
Gruß, Jan
Hallo,
ich versuche eine Tabellenzelle so zu konfigurieren, dass beim Mousover die Hintergrundfarbe geändert wird. Wenn ich den <a href...> in die Zelle schreibe gilt der Mouseover nur bis zu Ende des Zelleninhaltes. Es soll aber auch funktionieren wenn die Zelle leer ist. Im Explorer funktioniert das super nur im Netscape nicht. Was mache ich falsch?
[snip]
<td id="Zelle1" style="position:relative" bgcolor="#2C4F90">
Netscape 4.x (von dem du wahrscheinlich sprichst), kann Layer nur mit JS ansprechen, wenn sie absolut positioniert sind.
Struppi.
Hallo Struppi,
<td id="Zelle1" style="position:relative" bgcolor="#2C4F90">
Netscape 4.x (von dem du wahrscheinlich sprichst), kann Layer nur mit JS ansprechen, wenn sie absolut positioniert sind.
Wo ist denn da ein Layer?
Gruß, Jan
Hallo Struppi,
<td id="Zelle1" style="position:relative" bgcolor="#2C4F90">
Netscape 4.x (von dem du wahrscheinlich sprichst), kann Layer nur mit JS ansprechen, wenn sie absolut positioniert sind.
Wo ist denn da ein Layer?
Da:
Das Javascript (ausgelagert):
function farbe_zelle(id,farbe) {
if (document.all)
document.all[id].style.backgroundColor=farbe;
else
if (document.getElementById)
document.getElementById(id).style.backgroundColor=farbe;
else
if (document.layers)
document.layers[id].bgColor=farbe;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Struppi.
Hallo,
Wo ist denn da ein Layer?
Da:
Das Javascript (ausgelagert):function farbe_zelle(id,farbe) {
if (document.all)
document.all[id].style.backgroundColor=farbe;
else
if (document.getElementById)
document.getElementById(id).style.backgroundColor=farbe;
else
if (document.layers)
document.layers[id].bgColor=farbe;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Naja. Hier wird versucht mit JS einen Layer anzusprechen, den es aber nicht gibt.
Wahrscheinlich kann man das ganze 'if(document.layers)...' weglassen, da das Verändern der HG-Farbe von Tabellenzellen in NS4 nicht funktioniert. (?)
Gruß, Jan