carsten schlichting: komplexe roll_overbilder

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

  1. Hallo carsten schlichting,

    pf_basis = new images();

    ich glaube, das heißt: "new Image()"

    Gruß, Jürgen

    1. pf_basis = new images();

      ich glaube, das heißt: "new Image()"

      im code ist es richtig, aber danke!

      1. 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.

  2. 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

  3. 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

    1. 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

      1. 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

  4. 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

    --
    My sssignature, my preciousssss!
    1. 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
      
      1. 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

        --
        My sssignature, my preciousssss!
        1. 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'].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.

          »»

          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

          1. Moin!

            var ef = "pf_gre2_zu_" + "3_no"; (in PHP ergibt dies einen Sinn!!)
            window.document.images[0].src = window['ef'].src

            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.

            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

            --
            My sssignature, my preciousssss!
            1. 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