komplexe roll_overbilder
carsten schlichting
- javascript
hallo
wollte fragen, ob mir jemand bei meinem JS_Problem weiterhelfen kann.
Der code geht ungefähr so
die Imagedefinitionen:
pf_basis = new images();
pf_basis.src="images/pf_basis_3_no.gif";
dann die 1. funktion, die mit onmouseover aufgerufen wird:
function BiWeNav2 (BiWech) {
var bild = window.document.images[0].src;
switch(bild) {
case "http://localhost/homepage_2/images/pf_basis_3_no.gif":
BiWeNav(BiWech);
break;
dann die 2.:
function BiWeNav(BiWech) {
alert(BiWech);
window.document.images[0].src=BiWech.src
}
wenn ich jetzt mit onMouseOver="('pf_basis')" die funktionen aufrufe, gibt die 2. funtion zu testzwecken pf_basis aus.
dann wird das Bild auch gewechselt, aber das bild wird mit einem Platzhalter ersetzt.Bi der ausgabe des codes wird das Bild als undefiniert beschrieben, obwohl ich es oben definiert habe.(pf_basis.src=...).
teste ich nur die 1. funktion mit der abänderung:
window.document.images[0].src=pf_basis.src; oder
window.document.images[0].src=pf_li.src;
wird kein Platzhalterausgegeben und der bildwechsel funktioniert. die definition oben muß also stimmen.
warum tauscht die 2. Funktion, denn nicht korrekt das Bild?
kann mir hier jemand weiterhelfen?
grüße von mir
carsten
Hallo carsten schlichting,
pf_basis = new images();
ich glaube, das heißt: "new Image()"
Gruß, Jürgen
pf_basis = new images();
ich glaube, das heißt: "new Image()"
im code ist es richtig, aber danke!
pf_basis = new images();
ich glaube, das heißt: "new Image()"
im code ist es richtig, aber danke!
Dein Code, ist nicht richtig!
Das Objekt heißt Image Die collection heißt documemt.images[..] was aber zwei verschiedene sachen sind.
Allgemein läßt sich sagen, dass du vielleicht ein bisschen mehr selfhtml liest und versuchst zu verstehen. Dein Verständniss für JS im speziellen und programmieren im allgemeinen sind noch sehr rudimentär und wir können dir hier keinen Grundkurs im programmieren anbieten. Deine Probleme rühren vor allem daher dass dir nicht richtig klar ist was Variabeln, Parameter und Objekte sind. Ohne dieses Verständniss wird dieser Thread ein ziemlicher Krampf werden.
Struppi.
Hallo,
pf_basis = new images();
pf_basis.src="images/pf_basis_3_no.gif";
vielleicht ist es nur ein Schriebfehler im Beitrag, aber das müsste doch eigentlich new Image(); heißen und nicht new imageS();
Schöne Grüße
Axel
hallo
wollte fragen, ob mir jemand bei meinem JS_Problem weiterhelfen kann.Der code geht ungefähr so
die Imagedefinitionen:
pf_basis = new images();
pf_basis.src="images/pf_basis_3_no.gif";dann die 1. funktion, die mit onmouseover aufgerufen wird:
function BiWeNav2 (BiWech) {
var bild = window.document.images[0].src;
switch(bild) {
case "http://localhost/homepage_2/images/pf_basis_3_no.gif":
BiWeNav(BiWech);
break;dann die 2.:
function BiWeNav(BiWech) {
alert(BiWech);
window.document.images[0].src=BiWech.src
}wenn ich jetzt mit onMouseOver="('pf_basis')" die funktionen aufrufe, gibt die 2. funtion zu testzwecken pf_basis aus.
dann wird das Bild auch gewechselt, aber das bild wird mit einem Platzhalter ersetzt.Bi der ausgabe des codes wird das Bild als undefiniert beschrieben, obwohl ich es oben definiert habe.(pf_basis.src=...).
teste ich nur die 1. funktion mit der abänderung:
window.document.images[0].src=pf_basis.src; oder
window.document.images[0].src=pf_li.src;
wird kein Platzhalterausgegeben und der bildwechsel funktioniert. die definition oben muß also stimmen.warum tauscht die 2. Funktion, denn nicht korrekt das Bild?
wenn ich auf die eigenschaften des Platzhalters im Netscape klicke, erscheint Bild ist undefiniert??.
warum funktioniert hier bloß window.document.images[0].src=BiWech.src; nicht.
jetzt habe ich in der 2. funktion probiert:
window.document.images[0].src=pf_li.src;
und das funktioniert komischer weise??
also liegt der fehler in BiWech.src
auch wenn ich den variablen_namen wechsle(weil die andere Funktion denselben namen benutzt) tritt dasselbe problem auf
.. was könnte hier falsch drann sein??
weiß jemand wie ich das richtig schreiben muß.--
ich bin mir 100% sicher, das das so in einer anderen funktion schon einmal funktioniert hat.
grüße von mir
carsten
Hallo Carsten,
wenn ich jetzt mit onMouseOver="('pf_basis')" die funktionen aufrufe, gibt die 2. funtion zu testzwecken pf_basis aus.
ich vermute mal, da steht onMouseOver="BiWeNav2('pf_basis')"
So übergibst du der Funktion den String 'pf_basis', nicht aber das Objekt. Lass mal die '' weg. Dann wird das Bildobjekt übergeben.
Gruß, Jürgen
Hallo Carsten,
wenn ich jetzt mit onMouseOver="('pf_basis')" die funktionen aufrufe, gibt die 2. funtion zu testzwecken pf_basis aus.
ich vermute mal, da steht onMouseOver="BiWeNav2('pf_basis')"
So übergibst du der Funktion den String 'pf_basis', nicht aber das Objekt. Lass mal die '' weg. Dann wird das Bildobjekt übergeben.Gruß, Jürgen
vielleicht war das der fehler
..
danke
heut abend bin ich wieder da..
gruß carsten
Moin!
Hier definierst du ein Objekt pf_basis.
pf_basis = new images();
pf_basis.src="images/pf_basis_3_no.gif";
Und hier greifst du auf ein Objekt BiWech zu - das ist natürlich was ganz anderes, als das oben definierte.
function BiWeNav(BiWech) {
alert(BiWech);
window.document.images[0].src=BiWech.src
}
Eigentlich willst du auf ein Objekt, dessen Name in der Variablen BiWech steht, zugreifen. Das klappt nicht, wie du es hier probierst. Es dürfte aber so klappen:
window.document.images[0].src=window[BiWech].src
Alle definierten Variablen sind Eigenschaften des window-Objekts. Folgende Zugriffsformen sind identisch:
variable = "test"
window.variable = "test"
window['variable'] = "test"
Mit der letzten Form kannst du den gewünschten Variablennamen auch in eine Stringvariable stecken und darauf zugreifen.
Entsprechendes gilt für Unterobjekte, und deren Eigenschaften und Methoden.
Weil das Objekt BiWech keine Eigenschaft BiWech.src hat (es ist ein String), wird deinem Bild eine falsche URL übergeben, und es deshalb nicht angezeigt.
- Sven Rautenberg
Es dürfte aber so klappen:
window.document.images[0].src=window[BiWech].src
Alle definierten Variablen sind Eigenschaften des window-Objekts. Folgende Zugriffsformen sind identisch:
variable = "test"
window.variable = "test"
window['variable'] = "test"
>
> Mit der letzten Form kannst du den gewünschten Variablennamen auch in eine Stringvariable stecken und darauf zugreifen.
>
> Entsprechendes gilt für Unterobjekte, und deren Eigenschaften und Methoden.
>
> Weil das Objekt BiWech keine Eigenschaft BiWech.src hat (es ist ein String), wird deinem Bild eine falsche URL übergeben, und es deshalb nicht angezeigt.
>
> - Sven Rautenberg
hallo Sven --dankeschön
in der Funktion funktioniert es jetzt-super
aber folgender befehl stockt noch . hier kommt die fehlermelödung window.ef has no properties.
habe folgendes gemacht
var ef = "pf\_gre2\_zu\_" + "3\_no"; (in PHP ergibt dies einen Sinn!!)
window.document.images[0].src = window['ef'].src
oder eben:
window.document.images[0].src = window.ef.src
woran könnte diese fehlermeldung (window.ef has no properties) denn jetzt liegen?
Grüße und danke nochmal
carsten
Moin!
aber folgender befehl stockt noch . hier kommt die fehlermelödung window.ef has no properties.
habe folgendes gemacht
var ef = "pf_gre2_zu_" + "3_no"; (in PHP ergibt dies einen Sinn!!)
Das ist eine simple String-Variable. Die kann man beispielsweise mit alert() ausgeben lassen, und man erhält den Text "pf_gre2_zu_3_no".
window.document.images[0].src = window['ef'].src
Hier versuchst du, diesen String als Image-Objekt zu interpretieren, was nicht klappt, weil es ja ein String ist. Strings haben keine src-Eigenschaft, die man abfragen könnte.
window.document.images[0].src = window.ef.src
Das ist ja (vgl. das Vorposting) idetisch zu:
document.images[0].src = ef.src
Du hast oben aber nicht ef.src definiert, sondern nur ef - als String.
woran könnte diese fehlermeldung (window.ef has no properties) denn jetzt liegen?
Was willst du mit ef machen, und was hat die Zugriffsart "Bildobjekt" damit zu tun?
- Sven Rautenberg
Moin!
aber folgender befehl stockt noch . hier kommt die fehlermelödung window.ef has no properties.
habe folgendes gemacht
var ef = "pf_gre2_zu_" + "3_no"; (in PHP ergibt dies einen Sinn!!)
window.document.images[0].src = window['ef'].srcHier versuchst du, diesen String als Image-Objekt zu interpretieren, was nicht klappt, weil es ja ein String ist. Strings haben keine src-Eigenschaft, die man abfragen könnte.
window.document.images[0].src = window.ef.src
Das ist ja (vgl. das Vorposting) idetisch zu:
document.images[0].src = ef.srcDu hast oben aber nicht ef.src definiert, sondern nur ef - als String.
»»
Was willst du mit ef machen, und was hat die Zugriffsart "Bildobjekt" damit zu tun?
Was willst du mit ef machen, und was hat die Zugriffsart "Bildobjekt" damit zu tun?
wollte einfach in der Programmlogik den string praktisch wie man es schreiben würde in den befehl schreiben, in der hoffnung, das JS darüber ließt und das richtig interpretiert. ..,dass JS ef einfach durch den string ersetzen würde.
ef hatte eine programmlogische bedeutung gehabt, die ich mitlerweile umgehen konnte. kann hier jetzt direkt z.B. pf_re.src aufrufen.
aber mir ist das mit den JS_variablen immer noch nicht ganz klar.
habe jetzt z. B. folgendes :
window.setTimeout("BiWeNav(BiWech)",200);
oder alternativ.
window.setTimeout("BiWeNav(window[BiWech])",200);
aber es kommt immer wieder diese fehlermeldung, das BiWech nicht definiert ist.
wenn ich jetzt schreibe:
window.setTimeout("BiWeNav(pf_re)",200);
kommt die fehlermeldung das die variable in der aufgerufenen funktion keine eigenschaften hätte-->also gibt es vielleicht probleme mit der Set TimeOut-funktion.
(Möchte aber anstatt pf_re eine flexible variable einfügen, die abhängig von dem On MouseOver="BiWeNav(je nach schaltfläche)" ist.)
irgendwie kapier ich hier nicht wie ich dies für JS schreiben müßte. speziell in der settimeOut-funktion
komischerweise funktioniert ja:
BeWeNav(BiWech); ???
also danke auf jedenfall
wo könnte ich das denn alles generell mal nachlesen?
carsten
Moin!
var ef = "pf_gre2_zu_" + "3_no"; (in PHP ergibt dies einen Sinn!!)
window.document.images[0].src = window['ef'].srcWas willst du mit ef machen, und was hat die Zugriffsart "Bildobjekt" damit zu tun?
wollte einfach in der Programmlogik den string praktisch wie man es schreiben würde in den befehl schreiben, in der hoffnung, das JS darüber ließt und das richtig interpretiert. ..,dass JS ef einfach durch den string ersetzen würde.
Du meinst, du wolltest auf das Bildobjekt pf_gre2_zu_3_no zugreifen (z.B. auf .src davon)?
Dann wäre window[ef].src wohl richtig gewesen.
Mit ['ef'] meinst du den String 'ef', folglich mit window['ef'] die Variable namens ef.
Mit [ef] meinst du die Variable ef, mit window[ef] meinst du die Variable, deren Namen in der Variablen ef gespeichert ist.
aber mir ist das mit den JS_variablen immer noch nicht ganz klar.
window.setTimeout("BiWeNav(BiWech)",200);
window.setTimeout definiert einen Javascript-Befehl, der (nachdem die Funktion selbst schon lange abgeschlossen und alle lokalen Variablen vergessen sind!) nach gewisser Zeit aufgerufen wird.
Stell dir einfach vor, im Hauptprogramm (also außerhalb jeder Funktion) wird der Befehl
BiWeNav(BiWech)
aufgerufen.
Gibt es da die Variable BiWech schon oder noch? Und zwar in der globalen Ebene, nicht irgendwo innerhalb einer Funktion!
Wenn nein, dann ist das der Grund für dein Problem.
window.setTimeout("BiWeNav(window[BiWech])",200);
Wenn es die Variable in der ersten Schreibweise nicht gibt (wichtig: global definiert), dann wird sie auch in der zweiten Schreibweise nicht existieren.
wenn ich jetzt schreibe:
window.setTimeout("BiWeNav(pf_re)",200);
kommt die fehlermeldung das die variable in der aufgerufenen funktion keine eigenschaften hätte-->also gibt es vielleicht probleme mit der Set TimeOut-funktion.
setTimeout tut alles so, wie es soll. Das Problem ist, dass du dir klar werden mußt über den Unterschied zwischen Strings, Variablennamen und Objekten.
Und natürlich kommt es auch drauf an, was die Funktion BiWeNav so macht.
(Möchte aber anstatt pf_re eine flexible variable einfügen, die abhängig von dem On MouseOver="BiWeNav(je nach schaltfläche)" ist.)
Ich habe so das Gefühl, dass du da ein ziemlich ausuferndes Gebilde strickst, welches sich wesentlich leichter und eleganter realisieren ließe, wenn du beispielsweise Arrays verwenden würdest. Man kan sich das Leben ziemlich erleichtern und die Tipparbeit verkürzen, wenn man sich vernünftige Strukturen überlegt, die den Zugriff erleichtern.
Ebenso arbeitest du ja immer noch mit indexbasiertem Bildzugriff (images[0]), und nicht mit Bildnamen (images['name']) - das wäre auch eine deutliche Verbesserung, wenn man die Bilder nicht immer abzählen müßte.
komischerweise funktioniert ja:
BeWeNav(BiWech); ???
Innerhalb deiner Funktion existiert die Variable BiWech offenbar, außerhalb aber nicht.
wo könnte ich das denn alles generell mal nachlesen?
Gute Frage - hier im Forum vielleicht. :)
- Sven Rautenberg
Hi
Gibt es da die Variable BiWech schon oder noch? Und zwar in der globalen Ebene, nicht irgendwo innerhalb einer Funktion!
Wenn nein, dann ist das der Grund für dein Problem.
window.setTimeout("BiWeNav(window[BiWech])",200);
Wenn es die Variable in der ersten Schreibweise nicht gibt (wichtig: global definiert), dann wird sie auch in der zweiten Schreibweise nicht existieren.
hallo also danke noch mal für die unterstützung
mit Return habe ich erste Erfolge bei der variablen_Übergabe erzielt.
werd das in den nächsten tagen hoffentlich zuende bringen können
also grüße
carsten