Bildaustausch per Checkbox
MarkX
- javascript
Guten morgen!
Ich hoffe jemand kann mir bei folgendem Problem helfen:
Ich habe ein Bild, daß per Javascript ausgetauscht werden soll, je nachdem welche Kombination von 3 Checkboxen gerade aktuell ist. Es gibt also 8 Möglichkeiten. Aber das ist erstmal unerheblich für mein Problem, welches darin besteht, daß diese Seite im IE prima funktioniert, im Netscape 6 das ganze ohne Fehlermeldung nicht funktioniert, dh. die Bilder werden NICHT ausgetauscht. Und im Netscape 4.75 es nicht funktioniert mit folgender Fehlermeldung:
JavaScript Error: file:/A|/Ausleuchtung.htm, line 17:
document.bildwechsel has no properties.
Hier die entscheidenden Bereiche aus dem Code:
Bild_aus = new Image(); Bild_aus.src = "Serie_Alle_aus.jpg";
Bild_an = new Image(); Bild_an.src = "Serie_Alle_an.jpg";
Bild_A = new Image(); Bild_A.src = "Serie_A.jpg";
Bild_F = new Image(); Bild_F.src = "Serie_F.jpg";
Bild_H = new Image(); Bild_H.src = "Serie_H.jpg";
Bild_FH = new Image(); Bild_FH.src = "Serie_FH.jpg";
Bild_AH = new Image(); Bild_AH.src = "Serie_AH.jpg";
Bild_FA = new Image(); Bild_FA.src = "Serie_FA.jpg";
function checking1() {
if(document.bildwechsel.hlicht.checked == true && document.bildwechsel1.flicht.checked == true && document.bildwechsel2.alicht.checked == true)
document.images[1].src = Bild_an.src;
if(document.bildwechsel.hlicht.checked == false && document.bildwechsel1.flicht.checked == false && document.bildwechsel2.alicht.checked == false)
document.images[1].src = Bild_aus.src;
if(document.bildwechsel.hlicht.checked == true && document.bildwechsel1.flicht.checked == true && document.bildwechsel2.alicht.checked == false)
document.images[1].src = Bild_FH.src;
if(document.bildwechsel.hlicht.checked == true && document.bildwechsel1.flicht.checked == false && document.bildwechsel2.alicht.checked == true)
document.images[1].src = Bild_AH.src;
if(document.bildwechsel.hlicht.checked == false && document.bildwechsel1.flicht.checked == true && document.bildwechsel2.alicht.checked == true)
document.images[1].src = Bild_FA.src;
if(document.bildwechsel.hlicht.checked == true && document.bildwechsel1.flicht.checked == false && document.bildwechsel2.alicht.checked == false)
document.images[1].src = Bild_H.src;
if(document.bildwechsel.hlicht.checked == false && document.bildwechsel1.flicht.checked == true && document.bildwechsel2.alicht.checked == false)
document.images[1].src = Bild_F.src;
if(document.bildwechsel.hlicht.checked == false && document.bildwechsel1.flicht.checked == false && document.bildwechsel2.alicht.checked == true)
document.images[1].src = Bild_A.src;
}
Und so rufe ich die Funktion auf:
<div id="Layerx" style="position:absolute; left:321px; top:120px; width:296px; height:41px; z-index:8">
<form name="bildwechsel" action="">
<input type="checkbox" name="hlicht" onClick="checking1();"></form></div>
<div id="Layery" style="position:absolute; left:176px; top:494px; width:296px; height:41px; z-index:8">
<form name="bildwechsel1" action=""><input type="checkbox" name="flicht" onClick="checking1();"></form></div>
<div id="Layerz" style="position:absolute; left:569px; top:404px; width:296px; height:41px; z-index:8">
<form name="bildwechsel2" action=""><input type="checkbox" name="alicht" onClick="checking1();"></form></div>
Ich weiß, das ist verdammt viel für Freitag, aber ich würde Euch nicht damit belästigen, wenn es nicht dringend und wichtig wäre.
Vielen Dank für Eure Ansätze zur Lösung meines Problems!
MfG
MarkX.
Hi,
Und im Netscape 4.75 es nicht funktioniert mit folgender Fehlermeldung:
bitte sieh Dir im DHTML-Kapitel an, was ein positioniertes <div> für Netscape 4 ist, was für Konsequenzen daraus resultieren und wie man ergo damit umzugehen hat.
Cheatah
bitte sieh Dir im DHTML-Kapitel an, was ein positioniertes <div> für Netscape 4 ist, was für Konsequenzen daraus resultieren und wie man ergo damit umzugehen hat.
Danke erstmal. Ich hab in Selfhtml nachgeschaut. Für Netscape 4 wird ja wie es aussieht das layer-tag benutzt. OK. Ich weiß auch, daß es realtiv sinnlos ist für Netscape 4 mit divs zu arbeiten, weil er die Seite bei einem Resize zerschießt, OK. Ich habe dafür ein reload bei onresize eingesetzt. Trotzdem weíß ich nicht recht worauf Du hinaus willst. Irgendetwas scheint mit der Javascript-Funktion nicht zu stimmen. Ich will ja sonst auch immer lieber selbst rausbekommen wo der Fehler liegt, bin aber im Moment sehr im Zeitdruck. Wenn Du mir vielleicht noch einen Hinweis geben könntest? Ist das was ich mir vorstelle überhaupt so zu realisieren, daß es mit Netscape 4 läuft?
Vielen Dank nochmal!
MarkX.
Hi,
Danke erstmal. Ich hab in Selfhtml nachgeschaut. Für Netscape 4 wird ja wie es aussieht das layer-tag benutzt.
naja, ein positioniertes <div> _ist_ für Netscape 4 ein <layer> und muss daher auch so behandelt werden.
OK. Ich weiß auch, daß es realtiv sinnlos ist für Netscape 4 mit divs zu arbeiten, weil er die Seite bei einem Resize zerschießt, OK.
Ganz ehrlich: Wie oft änderst Du beim Surfen die Größe Deines Browserfensters?
Ich habe dafür ein reload bei onresize eingesetzt.
Wunderbar, hat aber mit dem Problem nichts zu tun :-)
Trotzdem weíß ich nicht recht worauf Du hinaus willst. Irgendetwas scheint mit der Javascript-Funktion nicht zu stimmen.
Wie würde es laut DHTML-Kapitel heißen müssen, wenn Du <layer> an Stelle der <div> stehen hättest?
Ich will ja sonst auch immer lieber selbst rausbekommen wo der Fehler liegt, bin aber im Moment sehr im Zeitdruck. Wenn Du mir vielleicht noch einen Hinweis geben könntest?
Ersteres ist sehr löblich, zweiteres gewöhnlich ein Dauerzustand ;-) und zu letzterem sage ich nur: eigene document-Objekte.
Ist das was ich mir vorstelle überhaupt so zu realisieren, daß es mit Netscape 4 läuft?
Ja, wobei ich natürlich nicht genau weiß, was Du Dir vorstellst :-)
Cheatah
naja, ein positioniertes <div> _ist_ für Netscape 4 ein <layer> und muss daher auch so behandelt werden.
Ich will doch das <div> in keiner Weise behandeln. Ich will lediglich auf ein Formularelement zugreifen. Ich verzweifle langsam. Es ist zum heulen.
Ganz ehrlich: Wie oft änderst Du beim Surfen die Größe Deines Browserfensters?
Absolut richtig meiner Meinung nach, aber die ist nicht immer ausschlaggebend, weil die Seite nicht für mich ist.
Wunderbar, hat aber mit dem Problem nichts zu tun :-)
Ist mir klar. :-)
Wie würde es laut DHTML-Kapitel heißen müssen, wenn Du <layer> an Stelle der <div> stehen hättest?
Wie würde WAS heißen müssen?
Ersteres ist sehr löblich, zweiteres gewöhnlich ein Dauerzustand ;-) und zu letzterem sage ich nur: eigene document-Objekte.
eigene document-Objekte. Hm. Gut. Und nun? Über das Dokument-Objekt müßte ich doch auf Checkboxen zugreifen können. Ich kann nur leider nicht einmal mit der Fehlermeldung etwas anfangen, die ich vorhin gepostet habe.
Ja, wobei ich natürlich nicht genau weiß, was Du Dir vorstellst :-)
Von dem "Ja" bin ich mittlerweile nicht mehr so überzeugt. <layer> kann ich auch nicht benutzen, weil es sonst nur im Netscape 4 läuft. Was ich mir vorstelle ist folgendes: ich möchte, daß ein Bild ausgetauscht wird abhängig von der Kombination der aktivierten Checkboxen. Und dies soll in den gängigen Browser laufen, besonders auch in Netscape 4.75.
Ich weiß ja Deine Bemühungen zu schätzen und lese Deine Antworten immer sehr aufmerksam. Meistens finde ich es lustig, wie die Leute sich über Deine "Arroganz" aufregen. Ich weiß natürlich um die wahre Intention Deines Antwortstils. Du willst daß die Leute selber nachschauen und dabei was lernen. Aber genug geschleimt. :-) Was muß ich tun um mein Problem zu lösen. Wenn ich wenigstens genau wüßte wo der Fehler liegt! :-)
Bis denne...
MarkX.
Hi,
naja, ein positioniertes <div> _ist_ für Netscape 4 ein <layer> und muss daher auch so behandelt werden.
Ich will doch das <div> in keiner Weise behandeln.
tja, das ist die Ursache Deines Problems. Du willst nicht, was Du aber machen musst.
Ich will lediglich auf ein Formularelement zugreifen.
Und hierdurch muss die Objektstruktur beachtet werden.
Wie würde es laut DHTML-Kapitel heißen müssen, wenn Du <layer> an Stelle der <div> stehen hättest?
Wie würde WAS heißen müssen?
Der JavaScript-Code, mit dem Du auf das Formularfeld zugreifst.
eigene document-Objekte. Hm. Gut. Und nun? Über das Dokument-Objekt müßte ich doch auf Checkboxen zugreifen können.
Mich deucht, Du hast das DHTML-Kapitel nach meinem Hinweis nicht konsultiert, und auch das Forums-Archiv links liegen lassen.
Ich kann nur leider nicht einmal mit der Fehlermeldung etwas anfangen, die ich vorhin gepostet habe.
"a.b.c.d.e ist kein Objekt"
=>
alert(a);
alert(a.b);
alert(a.b.c);
...
<layer> kann ich auch nicht benutzen, weil es sonst nur im Netscape 4 läuft.
Durch die Tatsache, dass Du positionierte <div>s benutzt, hast Du bereits <layer>. Es steht nur nicht explizit im HTML-Code.
Ich weiß ja Deine Bemühungen zu schätzen [...] Aber genug geschleimt. :-)
*g*
Was muß ich tun um mein Problem zu lösen. Wenn ich wenigstens genau wüßte wo der Fehler liegt! :-)
Der Fehler liegt darin, dass Du nicht die DHTML-Objektstruktur von Netscape 4 beachtest, welche sich durch positionierte <div> exakt so bildet, als hättest Du <layer> im Code stehen.
Cheatah
Ach Du scheiße, ich glaub ich hab´s.
Ich muß die Layer in der Form:
document.layer.document.form.feld
ansprechen, da die Layer im Netscape eigenständige Dokumente darstellen. Scheiße! Das heißt aber, daß es so wie ich will entweder nur in Netscape 4 oder nur überall sonst funktioniert. Ich werd wohl entweder so eine bescheuerte Java-Script-Browser-Überprüfung machen müssen oder mir was ganz Neues einfallen lassen.
Trotzdem Danke,
Der geknickte und deprimierte MarkX.
Hi,
Ach Du scheiße,
angenehm :-)
document.layer.document.form.feld
Bingo!
Das heißt aber, daß es so wie ich will entweder nur in Netscape 4 oder nur überall sonst funktioniert. Ich werd wohl entweder so eine bescheuerte Java-Script-Browser-Überprüfung machen müssen
Nein, es ist für Dich völlig uninteressant, welcher Browser verwendet wird. Du willst nur wissen, ob er document.layers beherrscht, document.all, document.getElementById oder Dein document.form auch so kennt. Das ist mit einem schlichten "if (daswasichbenutzenmoechte)" möglich.
oder mir was ganz Neues einfallen lassen.
Diese Methodik musste man spätestens dann einsetzen, als der IE 3 behauptet hat, JavaScript 1.1 zu beherrschen, aber document.images nicht kannte. Von daher ist das alles andere als neu :-)
Cheatah
OK, wunderbar! Das mit der if-Abfrage sollte kein Problem sein. Steht ja auch ziemlich detailiert in selfhtml.
Also, ich betrachte das Problem als nicht länger existent, danke Dir nochmal für Deine Hilfe und wünsche ein schönes Wochenende!
MfG
MarkX.
Hi,
Also, ich betrachte das Problem als nicht länger existent, danke Dir nochmal für Deine Hilfe und wünsche ein schönes Wochenende!
freut mich zu hören, und Dir ein ebensolches!
Cheatah