Bildwechsel unter NS
Günter Marchewka
- dhtml
Hallo Forum,
ich habe nach den Beispielen in SELFHTML eine Logik zum Bildwechsel zusammengestellt, die unter dem IE funktioniert, aber nicht unter NS4.7. Die Anweisungen zu onMouseOver und onMouseOut werden ignoriert, die Anweisung zu onMouseDown wird jedoch ausgeführt (allerdings nur, wenn diese im <img>-Tag ist). Die Wirkung zu onMouseOver und onMouseOut sind identisch, unabhängig ob im <a>-Tag oder im <img>-Tag.
Kann mir jemand sagen, was ich falsch mache?
Grüsse und Danke Günter
Hier der Code:
<style type="text/css">
<!--
a.hand { cursor:hand;}
//-->
</style>
<script language="JavaScript1.1">
window.name="adstart";
var F1='';
Zhtml='profil.html';
Zname='Fenster1';
function ZeigEs (Zhtml, Zname)// Das wird ausgeführt
{
if (F1) F1.close();
F1 = open(Zhtml,Zname,"width=730,height=530,scrollbars=yes");
x=(screen.availWidth/2)-381;
y=(screen.availWidth/2)-340;
F1.moveTo(x,y); // Das wird auch ausgeführt
}
Normal1 = new Image();
Normal1.src = "../bilder/a.gif"; // Das wird ausgeführt
Highlight1 = new Image();
Highlight1.src = "../bilder/a_d.gif";
Normal2 = new Image();
Normal2.src = "../bilder/l.gif";
Highlight2 = new Image();
Highlight2.src = "../bilder/l_d.gif";
function Bildwechsel(Bildnr,Bildobjekt)// Das wird nicht aufgerufen
{
window.document.images[Bildnr].src = Bildobjekt.src;
}
</script>
</head>
<body bgcolor=#000E66> <basefont face="Arial">
<title>Startseite</title>
<table width=100% cellpadding=0 cellspacing=0 border=0 bgcolor=#FFFFFF>
<td width=10% cellpadding=0 cellspacing=0 border=0 bgcolor=0000FF>
<table cellpadding=0 cellspacing=0 border=0>
<tr><td><A onMouseOver="Bildwechsel(0,Highlight1)" onMouseOut="Bildwechsel(0,Normal1)" class="hand"><img src="../bilder/a.gif" alt="Unser Profil" onMouseDown="ZeigEs('profil.html','Fenster1')" ></A></td></tr>
<tr><td><a class="hand"><img src="../bilder/l.gif" alt="Der Weg zu Uns" onMouseDown="ZeigEs('l.html','Fenster1')" onMouseOver="Bildwechsel(1,Highlight2)" onMouseOut="Bildwechsel(1,Normal2)"></a></td></tr>
</table>
</td>
<td width=1% cellpadding=0 cellspacing=0 border=0 bgcolor=#0000FF><a><font color=#0000FF>a</font></a></td>
<td width=77% cellpadding=0 cellspacing=0 border=0 bgcolor=#000E66 align=center valign=center><img src="../bilder/bild35.gif"></td>
<td width=12% cellpadding=0 cellspacing=2 border=0 bgcolor=#0000FF valign=top align=right><a><font color=#FFFF00><H2>Infos</H2><BR><B>Hier erhalten Sie Informationen BR><BR>Klicken Sie einfach auf einen der linken Knöpfe. Sie erhalten dann sofort weiterführende Informationen.</B></font></a></td>
</table>
Hallo,
der NS unterstützt Mouseover nur innerhalb des a-Tags, jener lautet aber <a href="xy"> .... es fehlt bei Dir die Adressierung href.... nun kannst Du einfach ein href="#" schreiben, oder Du sparst Dir das onMouseDown und schreibst als Adresse "javascript:ZeigEs('profil.html','Fenster1');" ....
Chräcker
Hallo Chräcker,
vielen Dank! So geht es.
btw: Was mich jetzt wundert, ist daß mit href="#" nun onMouseDown nicht mehr im <img>-Tag geht, dafür aber jetzt im <a>-Tag.
Grüsse Günter
Hallo,
btw: Was mich jetzt wundert, ist daß mit href="#" nun onMouseDown
nicht mehr im <img>-Tag geht, dafür aber jetzt im <a>-Tag.
hm, habe ich jetzt nicht ganz verstanden ;-) ich versuche es mal "zu verstehen" und hoffe, jetzt kein zu überflüßigen Müll zu schwadronieren. Bis jetzt hast Du Deine Javascript-Funktionen mit mousedown "aufegrufen".... deswegen gehörte dieses mousedown als auslösendes "Teil" auch in den img-Tag. Denn "auf dem Bild" sollte ja die Maustaste überwacht werden.
Wenn Du vor dem img-Tag ein a-Tag (und dahinter natürlich ein End-a, also </a>, setzt), dann übernimmt der Browser "für Dich" die Überwachung der Maus bezüglich des Bildes. Grob gesprochen: alles was zwischen <a> und </a> steht wird "überwacht".... bei einem Mausklick auf das, was dazwischen steht (also hier das Bild) wird eine ganz bestimmte Aktion ausgeführt, nämlich eine Adresse angesprungen. Diese Adresse steht dann in diesem href="Adresse" und kann halt eine Seite sein (http:....) oder eine JS-Funktion..... Wenn man so will versieht ein a-Tag das eingeschlossene Element automatisch mit einer Art Mousedown, noch saloper: mousedown ist bei dem a-Tag inklusive..... (und überwacht eben nicht das a-Tag sondern das eingeschlossene Elemnt, hier ein Bild....)
Chräcker
Hallo Chräcker,
Deine Infos sehe ich nicht als "Müll", sondern sie sind interessant.
Wenn Du vor dem img-Tag ein a-Tag (und dahinter natürlich ein End-a, also </a>, setzt), dann übernimmt der Browser "für Dich" die Überwachung der Maus bezüglich des Bildes. Grob gesprochen: alles was zwischen <a> und </a> steht wird "überwacht".... bei einem Mausklick auf das, was dazwischen steht (also hier das Bild) wird eine ganz bestimmte Aktion ausgeführt, nämlich eine Adresse angesprungen. Diese Adresse steht dann in diesem href="Adresse" und kann halt eine Seite sein (http:....) oder eine JS-Funktion..... Wenn man so will versieht ein a-Tag das eingeschlossene Element automatisch mit einer Art Mousedown, noch saloper: mousedown ist bei dem a-Tag inklusive..... (und überwacht eben nicht das a-Tag sondern das eingeschlossene Elemnt, hier ein Bild....)
Was mich gewundert hat, ist daß in der ersten Version, die ich gepostet hatte, das onMouseDown nicht funktioniert hat, wenn ich es im <a>-Tag untergebracht habe, sondern nur dann, wenn ich es <img>-Tag unterbringe. In der Version nach Deinem Tip (einbinden von href="#") geht es nun nur noch umgekehrt. Das <a>-Tag war ja vorher auch schon da, hat jedoch ohne href="#" kein onMouseDown akzeptiert (ohne Fehlermeldung), wie auch onMouseOver und onMouseOut, die vorher in beiden Tags nicht funktionierten(ohne Fehlermeldung).
Das Einfügen von href=... scheint hier Auswirkungen zu haben. Die Seite funktioniert jetzt an einer anderen Stelle auch anders als vorher. Bisher hatte ich entweder beim 2.Aufruf einer Seite oder nach einer nicht genau eingrenzbaren Menge an Seitenaufrufen über die bisherige Logik (teilweise erst nach dem 6.Mal) einen JavaScriptError erhalten (nur im NS) "close is not a function", bezogen auf die Zeile "if (F1) F1.close();". Dieser Fehler tritt nach dem Einfügen von href=... und dem Verschieben des onMouseDown in das <a>-Tag jetzt nicht mehr auf. Das war mir in der Freude, daß der Rest jetzt funktioniert gar nicht gleich aufgefallen, um das Problem wollte ich mich erst später kümmern.
Nochmal Danke und Grüsse
Günter
Hallo,
es freut mich, wenn jemand meine Postings liest ;-)))))
Das das onmousedown zuerst nicht funktionierte würde ich aus dem Bauch heraus damit beantworten, das der a-tag die Mausaktivitäten über dem Bild schon abgefangen hat und interpretieren wollte. (Was dann aber nicht ging, weil die Adrese ja fehlte...) Ich hoffe nicht, daß Du mir jetzt sagst, das onmousedown würde mit einer Adressierung im a-Tag auch nun im img funktionieren ;-)))))
Aber wie dem auch sei, was ich mich frage: wieso verwendest Du überhaubt onmosuedown? Laß das doch weg und schreibe in die Adresse des a-tags (href="...") die aufzurufende Javascriptfunktion
<a href="javascript:ZeigEs('profil.html','Fenster1');">
Chräcker
Hallo Chräcker,
es freut mich, wenn jemand meine Postings liest ;-)))))
Geht mir genau so! Und ich freue mich auch über Dein Interesse!
Das das onmousedown zuerst nicht funktionierte würde ich aus dem Bauch heraus damit beantworten, das der a-tag die Mausaktivitäten über dem Bild schon abgefangen hat und interpretieren wollte. (Was dann aber nicht ging, weil die Adrese ja fehlte...) Ich hoffe nicht, daß Du mir jetzt sagst, das onmousedown würde mit einer Adressierung im a-Tag auch nun im img funktionieren ;-)))))
Nein! Das ja nun gerade nicht! Es ist ja vielmehr das erstaunliche, das die Entwickler vom NS wohl gedacht haben, daß nur wenn man im <a>-Tag ein href angibt man auch ein Interesse am onMouse-Aktionen hat. Während sie bedacht haben, daß wenn nur im <img>-Tag ein onMouseDown ist, dies Sinn macht. Da gefällt mir die interne Sturktur vom IE besser, die mehr Freiheiten zulässt. Ich vermute, daß Deine erste Aussage "beim NS gehört href zum <a>-Tag" korrekt ist. Die Reaktion des NS ist nur so erklärbar.
Aber wie dem auch sei, was ich mich frage: wieso verwendest Du überhaubt onmosuedown? Laß das doch weg und schreibe in die Adresse des a-tags (href="...") die aufzurufende Javascriptfunktion
»» <a href="javascript:ZeigEs('profil.html','Fenster1');">
Weil ich href=... ja nun gerade vermeiden wollte, damit es diesen Rahmen um das Bild nicht gibt.
Aber ich bin bescheiden und freue mich, das es nun so funktioniert...
Na ja nicht so ganz, weil die Seite jetzt im NS anders aussieht als im IE die Farben stimmen nicht überein und die Bilder/Buttons sind nicht mehr ohne Abstand unter einander, was ich eigentlich wollte. Dafür habe ich nun das Problem mit cursor:hand nicht mehr und F1.close(); erzeugt keine Fehlermeldung mehr. Insgesamt bin ich nun zufrieden.
Danke und Grüße
Günter