Winfried Zimmermann: variable einer src eigenschaft übergeben, wo ist der denkfehler

Hallo
zunächst dank an dominique und struppi, für den richtigen hinweis ist bereits im archiv 27.12.04.
problem:
in einem neu geöffnetem fenster habe ich eine variable e deren inhalt ein url zu einem bild ist. dieses bild soll im neuen bereits geöffnentem fenster angezeigt werden. eine lösung ist vorhanden, warum gehen andere, die für mich formal richtig sein müßten nicht?
Zur Untersuchung habe ich eine kleine site (siehe unten) gebaut mit mehreren auskommentierten alternativen wie folgt:
  <script  type="text/javascript">
<!--
55 d = new Image();
56 //d.src="alb/albertihund_m.jpg"  //b = ok = href/alb/albertihund_m.jpg = Bild angezeigt
57 //d.src="alb/alberti_panprama_g.jpg" //b = ok = href/alb/alberti_panprama_g.jpg = Bild angezeigt
58 //d.src="alb/albertigartenarbeit_m.jpg" //b = ok = href/alb/albertigartenarbeit_m.jpg = Bild angezeigt
59 //d.src="alb/dezember1_m.jpg"  //b = ok = href/alb/dezember1_m.jpg = Bild angezeigt
60 //d.src = "grbild.substring(1, grbild.lenght)" //b = falsch = href/grbild.substring(1,%20grbild.lenght) = kein Bild
61 //d.src = grbild.substring(1, grbild.lenght)   //b = falsch = href/rb = ..substring(1, 2) = kein Bild
62 //d.src = "'+grbild.substring(1, grbild.lenght)+'"   //b = falsch = href/'+grbild.substring(1, grbild.lenght)+' = kein Bild
63 d.src = opener.urlgrossesbild
64 //d.src="'+e'"  //in e steht immer der URL (rel) des in der Galerie gewählten Bildes b = falsch = '+e' = kein Bild
65 //d.src="'+e.src'" //b = falsch = href/'+e.src' = kein Bild
66 //d.src=e  //b = falsch = href/e = kein Bild
67 //d.src="e"  //b = falsch = href/e = kein Bild
68 //d.src=["e"]  //b = falsch = href/e = kein Bild
69 //d.src=("e")  //b = falsch = href/e = kein Bild
70 b = d.src
71 f = document.images.lenght;
72 document.write('<img src="'+b+'" width="300" height="200" alt="grosses Bild">'); //Versuchszeile für Zeilen 56-69
73 //document.write('<img src="grbild.substring(1, grbild.lenght)" width="300" height="200" alt="grosses Bild">'); //kein Bild
74 //document.write('<img src=grbild.substring(1, grbild.lenght) width="300" height="200" alt="grosses Bild">'); //kein Bild
75 //document.write('<img src="'+grbild.substring(1, grbild.lenght)+'" width="300" height="200" alt="grosses Bild">'); //kein Bild
76 //document.write('<img src="'+opener.urlgrossesbild+'" width="300" height="300" alt="grosses Bild">');  //ok Bild angezeigt
//-->
</script>
56 - 76 = Zeilennummern
funktionierende lösungen: 55+63+72 und 76 alleine
56-59 nur prüfmuster
Meine Fragen:
Warum funktionieren zeilen 61+72  ;  66+72  ; 75  nicht?
warum wird 71 f=undefined angezeigt?
nicht genannte zeilen bitte übersehen, in der not frißt der teufel fliegen.
dank im voraus an die experten

  1. Hi,
    gehe das jetzt nicht im einzelnen durch.

    funktionierende lösungen: 55+63+72 und 76 alleine
    56-59 nur prüfmuster
    Meine Fragen:
    Warum funktionieren zeilen 61+72  ;  66+72  ; 75  nicht?

    wo ist 'grbild' definiert?
     wo ist dann 'b' definiert?
     hast du mal 'e' mit alert(e); kontrolliert?

    warum wird 71 f=undefined angezeigt?

    du mußt 'length' schreiben, nicht 'lenght'

    gruß
    peter

    1. PS:

      funktionierende lösungen: 55+63+72

      das dürfte übrigens auch nicht funktionieren, da brauchts noch die 70 dazu.

      gruß
      peter

      1. Hallo

        funktionierende lösungen: 55+63+72
        das dürfte übrigens auch nicht funktionieren, da brauchts noch die 70 dazu.

        klar du hast recht, es muß heißen zeilen 55+63+70+72 das ist auch die in der webseite benutzte variante.
        gruß winfried

    2. Hallo

      Hi,
      gehe das jetzt nicht im einzelnen durch.

      wo ist 'grbild' definiert?
      wo ist dann 'b' definiert?
      hast du mal 'e' mit alert(e); kontrolliert?

      sind alle vorher global definiert, wenn du den url oben aufrufst und auf der entsprechenden seite "variablen anzeigen" clickst werden die inhalte der variablen angezeigt, natütlich nur der aktuellen seite.

      warum wird 71 f=undefined angezeigt?

      du mußt 'length' schreiben, nicht 'lenght'

      danke ist bereits geändert.

      gruß winfried

      1. hi,
        zeigt mir nix für:
        'e','b','grbild'
        an.

        schreib doch einfach mal hin:

        alert(e);
        alert(b);
        alert(grbild);

        und schau was angezeigt wird.

        gruß
        peter

        1. hallo,

          zeigt mir nix für:
          'e','b','grbild'
          an.

          ich vermute du warst noch nicht auf dem testbild, das mit den blumen.
          wie folgt vorgehen
          in galerie ein kleines bild wählen > mittelbild ändert sich > auf mittelbild klicken > neues fenster öffnet sich > dann "variable anzeigen" klicken.
          gruß winfried

  2. Ich hab jetzt nur mal schnell drüber geschaut, das Hauptproblem ist, das du normalerweise keinen JS Code in einem String ausführen kannst und auch nicht in HTML Elementen ausser in Eventhandlern.

    <script  type="text/javascript">
    <!--
    55 d = new Image();
    56 //d.src="alb/albertihund_m.jpg"  //b = ok = href/alb/albertihund_m.jpg = Bild angezeigt

    Hier weist du dem Bild eine Quelle zu.

    60 //d.src = "grbild.substring(1, grbild.lenght)" //b = falsch = href/grbild.substring(1,%20grbild.lenght) = kein Bild

    Hier ist das oben erwähnte Problem.
    Du meinst evtl.
    d.src = grbild.substring(1, grbild.lenght);
    Damit schneidest du den String ab dem ersten Zeichen ab grbild.length kannst du dir auch sparen. Es reicht:
    d.src = grbild.substring(1);

    61 //d.src = grbild.substring(1, grbild.lenght)   //b = falsch = href/rb = ..substring(1, 2) = kein Bild

    Wegen Tippfehler.

    62 //d.src = "'+grbild.substring(1, grbild.lenght)+'"   //b = falsch = href/'+grbild.substring(1, grbild.lenght)+' = kein Bild

    Überleg dir was du da machst.
    d.src = "'+grbild.substring(1, grbild.lenght)+'"

    d.src ist jetzt ein String der so ausieht:
    '+grbild.substring(1, grbild.lenght)+'

    seltsam, oder.

    Den Rest spar ich mir jetzt es ist schon spät.

    Aber Grundsätzlich läßt sich sagen, dass dir noch das eine oder andere Verständniss für das was du tust fehlt. Du solltest dich mal genauer mit Strings auseinandersetzen.

    Struppi.

    1. Ich hab jetzt nur mal schnell drüber geschaut, das Hauptproblem ist, das du normalerweise keinen JS Code in einem String ausführen kannst und auch nicht in HTML Elementen ausser in Eventhandlern.

      ok, verstanden

      Aber Grundsätzlich läßt sich sagen, dass dir noch das eine oder andere Verständniss für das was du tust fehlt. Du solltest dich mal genauer mit Strings auseinandersetzen.

      56 - 76 = Zeilennummern
      funktionierende lösungen: 55+63+70+72 und 76 alleine
      56-59 nur prüfmuster
      Meine Fragen: leider erst am Ende geschrieben
      Warum funktionieren zeilen 61+72  ;  66+72  ; 75  nicht?
      nicht genannte zeilen bitte übersehen, in der not frißt der teufel fliegen. ich habe einfach experimentiert, um rauszufinden wie das system reagiert, daher die ergebnisse auch in den kommentaren.
      zeile 61 korrigiert in
      d.src = grbild.substring(1);   //b = falsch = href/rb = ..substring(1, 2) = kein Bild
      trotzdem gleiches ergebnis wie alte schreibweise.
      es muß einen unterschied in der verarbeitung der zeilen 61, 66 und der zeile 63 geben, den ich mir nicht erklären kann.
      die schreibweise ist meine ich formal richtig. die variable e wird richtig ermittelt. kannst du prüfen mit url oben.
      danke

      1. die schreibweise ist meine ich formal richtig. die variable e wird richtig ermittelt. kannst du prüfen mit url oben.

        Also ich finde auf der Seite http://www.dasmultimediateam.de/galerie.html erstmal einen Haufen Code von einem Filterprogramm
        function wwOnError() {
         return (true);
        }
        onError = wwOnError;

        usw.

        Das verhindert, das du Fehler siehst und darüber hinaus ist das Skript auch ziemlicher Mist, da es document.open auf window.open umlenkt.

        Ansonsten würde es die Arbeit wesentlich erleichtern, wenn der Quellcode nicht aus unmengen überflüssigen Tabellen bestehen würde. Schließlich sollen sich andere mit deinem Problem auseinandersetzen und sich nicht erst durch Haufenweise Code wühlen müssen. Ich kann so nicht erkennen, wo der zusammenhang im Quellcode mit deinen gestellten Fragen ist.

        Struppi.

        1. die schreibweise ist meine ich formal richtig. die variable e wird richtig ermittelt. kannst du prüfen mit url oben.

          Also ich finde auf der Seite http://www.dasmultimediateam.de/galerie.html erstmal einen Haufen Code von einem Filterprogramm

          sorry auf dieser seite ist mein problem nicht dargestellt, habe sie mit golive geschrieben, um mein problem überhaupt darstellen zu können. zur problemdarstellung kommst du wie folgt:
          in galerie ein kleines bild wählen > mittelbild ändert sich > auf mittelbild klicken > neues fenster öffnet sich > dann "variable anzeigen" klicken.
          den text habe ich auch gerade an peter gesandt.
          auf dieser seite sollte es keinen haufen unübersichtlichen code geben.
          gruß winfried

          1. hi,

            ......
            auf dieser seite sollte es keinen haufen unübersichtlichen code geben.

            doch, und die Ausgabe der Variablen is auch total unübersichtlich.Was soll man denn mit einer Meldung wie z.B.:

            grbild bildurl+? = ?ordner/name.jpg

            anfangen, wenn man sich das nicht selbst ausgedacht hat und daher weiß, was gemeint ist?

            wo liegt jetzt eigentlich dein Problem?
            Das mit den Strings hat dir Struppi ja schon ans Herz gelegt....

            gruß
            peter

            1. Hallo,

              grbild bildurl+? = ?ordner/name.jpg

              akzeptiert
              vor = Variablen Name - Leertaste - Kurzkommentar
              nach = Wert der Variablen
              hätte ich besser machen können, war bei der Erstellung nur für mich gedacht.

              Erläuterung zu Kommentar nach //b =:
              //Variable b = Ergebnis:ok mit, falsch ohne Bild = href + Wert der Variablen b = (Erläuterung) = nochmal Ergebnis

              Das mit den Strings hat dir Struppi ja schon ans Herz gelegt....

              deswegen hatte ich ja schon vorher die Versuche gemacht und darum gebeten die nicht gefragten Zeilen zu übersehen.

              wo liegt jetzt eigentlich dein Problem?

              Meine Fragen: leider erst am Ende geschrieben
              Warum funktionieren zeilen 61+72  ;  66+72  ; 75  nicht?
              zeile 61 gemäß Struppi korrigiert in
              d.src = grbild.substring(1);   //b = falsch = href/rb = ..substring(1, 2) = kein Bild
              trotzdem gleiches Ergebnis wie alte Schreibweise.
              Es muß einen Unterschied in der Verarbeitung der Zeilen 61, 66 und der Zeile 63 geben, den ich mir nicht erklären kann.
              Die Schreibweise ist meine ich formal richtig. die Variable e wird richtig ermittelt.

              danke

              1. Hi

                wo liegt jetzt eigentlich dein Problem?
                Meine Fragen: leider erst am Ende geschrieben
                Warum funktionieren zeilen 61+72  ;  66+72  ; 75  nicht?

                zeile 61 gemäß Struppi korrigiert in
                d.src = grbild.substring(1);   //b = falsch = href/rb = ..substring(1, 2) = kein Bild

                Auf deiner angegebenen Beispielseite werden die Variablen 'grbild' und 'e' in einem Funktionsaufruf belegt.

                Diese Funktion wird im Code aber über <body onload="... aufgerufen.

                Die Variable ist also zum Zeitpunkt, zu dem du sie verwendest noch mit dem String belegt, den du ihr bei der Initialisierung zuweist.

                Diese beiden Variablen verwendest du aber in den angegebenen Zeilen.

                Kann dir nur empfehlen, dem Rat von Struppi zu folgen und den ganzen Kram mal aufzuräumen.
                Dann findest du vielleicht den Überblick.

                Zum Ausprobieren kann ich dir nur noch einmal empfehlen,
                'alert()' zu verwenden.

                Damit kannst du in deinem Code überprüfen, was zu dem Zeitpunkt, zu dem du sie verwendest in den Variablen drinsteht.

                Schreib doch einfach mal:

                alert(e);alert(grbild);

                vor oder nach die Zeile 61 und schau nach was ausgegeben wird!!!

                gruß
                peter

                1. Hallo,

                  Diese Funktion wird im Code aber über <body onload="... aufgerufen.

                  Die Variable ist also zum Zeitpunkt, zu dem du sie verwendest noch mit dem String belegt, den du ihr bei der Initialisierung zuweist.

                  das ist die Antwort die ich nicht gefunden habe. Ich bin davon ausgegangen, daß onload auch zu diesem Zeitpunkt an dem es im Text steht ausgeführt wird.

                  Zum Ausprobieren kann ich dir nur noch einmal empfehlen,

                  habe ich ja in der Funktion nachr() gemacht. Das dieser zeitliche Zusammenhang besteht habe ich nicht bedacht. Es ist sogar so, daß 3 unbedeutende Zeilen vor diesem Aufruf (Kommentarende, Scriptende Tag, neue Zeile) die Variable e noch nicht gültig ist.
                  2 Dinge gelernt:
                  1. Bei Objektorientierter Programmierung sind textlicher und zeitlicher Ablauf nicht synchron.
                  2. Verwende bei der Initialisierung von Variablen nicht den Namen der Variablen zur Erkennung der Verarbeitung.
                  Dieser Fall ist damit erledigt.
                  Danke für Euere Geduld mit mir

                  1. Diese Funktion wird im Code aber über <body onload="... aufgerufen.

                    Die Variable ist also zum Zeitpunkt, zu dem du sie verwendest noch mit dem String belegt, den du ihr bei der Initialisierung zuweist.
                    das ist die Antwort die ich nicht gefunden habe. Ich bin davon ausgegangen, daß onload auch zu diesem Zeitpunkt an dem es im Text steht ausgeführt wird.

                    Dann würde sie nicht onload heißen. onload bedeutet nach dem laden, du brauchst diesen Event um auf Elemente deiner Seite zugreifen zu können, da diese ja erst nachdem der Browser sie geladen hat vorhanden sind.

                    Zum Ausprobieren kann ich dir nur noch einmal empfehlen,
                    habe ich ja in der Funktion nachr() gemacht. Das dieser zeitliche Zusammenhang besteht habe ich nicht bedacht. Es ist sogar so, daß 3 unbedeutende Zeilen vor diesem Aufruf (Kommentarende, Scriptende Tag, neue Zeile) die Variable e noch nicht gültig ist.

                    Die Anzahl der Zeilen ist da völlig unbedeutend. onload kann sehr lange dauern, je nach größe der enthaltenen Elemente (z.b. bilder)

                    2 Dinge gelernt:

                    1. Bei Objektorientierter Programmierung sind textlicher und zeitlicher Ablauf nicht synchron.

                    Was hat das eine mit den beiden anderen Dingen zu tun. Du hast einen Event Handler benutzt und dieser wird erst aufgerufen wenn der Event eintritt. Ansonsten werden JS Befehle immer nacheinander ausgeführt.

                    1. Verwende bei der Initialisierung von Variablen nicht den Namen der Variablen zur Erkennung der Verarbeitung.

                    Der Satz ist ein bisschen unverständlich, du kannst jederzeit sowohl die existenz der Variabel prüfen z.b. mit typeof als auch den Wert (sofern sie deklariert wurde). Das ist auch ein vorgehen das man unbedingt einhalten sollte, eine Variabel immer prüfen ob den erwarteten Wert hat.

                    Struppi.

                    1. hallo,

                      Der Satz ist ein bisschen unverständlich,

                      bei der Interpretation der Ergebnisse hätte ich eher gemerkt, das da was nicht stimmt. Inhalt mit Namen verwechselt

                      du kannst jederzeit sowohl die existenz der Variabel prüfen z.b. mit typeof als auch den Wert (sofern sie deklariert wurde). Das ist auch ein vorgehen das man unbedingt einhalten sollte, eine Variabel immer prüfen ob den erwarteten Wert hat.

                      ist schon klar, mach ich ja auch, sonst hätte ich mir nicht den ganzen Zeilenwust gebaut. Diente mir ja auch als Dokumentation was ich schon alles versucht habe.
                      Dir auch nochmal danke für die Geduld mit mir
                      Gruß Winfried

          2. in galerie ein kleines bild wählen > mittelbild ändert sich > auf mittelbild klicken > neues fenster öffnet sich > dann "variable anzeigen" klicken.
            den text habe ich auch gerade an peter gesandt.
            auf dieser seite sollte es keinen haufen unübersichtlichen code geben.

            Ich bekomm dann einen stack overflow. Ich vermute das leigt an diesem komischen Filtercode (wwOpen usw). was hat der denn da überhaupt zu suchen?

            Struppi.

            1. hallo,

              Ich bekomm dann einen stack overflow. Ich vermute das leigt an diesem komischen Filtercode (wwOpen usw). was hat der denn da überhaupt zu suchen?

              kann ich nicht beantworten, habe selbst wissentlich keinen Filtercode eingebaut, kann nur aus Golive stammen.
              Ich arbeite mit IE 6 Sp2 da geht es, andere Browser sind nicht geprüft. Zunächst bin ich froh, daß überhaupt was geht, ist meine erste etwas komplexere Site.
              Gruß Winfried

              1. Ich bekomm dann einen stack overflow. Ich vermute das leigt an diesem komischen Filtercode (wwOpen usw). was hat der denn da überhaupt zu suchen?
                kann ich nicht beantworten, habe selbst wissentlich keinen Filtercode eingebaut, kann nur aus Golive stammen.

                Wie gesagt er verändert die Funktionalität und du solltest ihn löschen

                Ich arbeite mit IE 6 Sp2 da geht es, andere Browser sind nicht geprüft. Zunächst bin ich froh, daß überhaupt was geht, ist meine erste etwas komplexere Site.

                Ich denke es geht nicht???

                Struppi.

                1. Hallo,

                  kann ich nicht beantworten, habe selbst wissentlich keinen Filtercode eingebaut, kann nur aus Golive stammen.

                  Wie gesagt er verändert die Funktionalität und du solltest ihn löschen

                  In meinem Quelltext gibt es keinen solchen Filtercode. Das kann nur ein JS code sein, den Golive aus seiner JS Bibliothek einbaut. Das kann ich garnicht ausbauen.

                  Ich denke es geht nicht???

                  bitte nochmal meinen 1. Beitrag lesen (Schreibfehler sind korrigiert). Von Dir habe ich ja einen Lösungsweg (opener) aufgezeigt bekommen. Es gibt sogar 2 Lösungen.
                  Meine Frage ist, verkürzt dargestellt:
                  warum funktioniert
                  d.src = opener.urlgrossesbild;
                  warum funktioniert nicht
                  d.src = grbild.substring(1);
                  wenn die Werte von urlgrossesbild und grbild gleich sind.
                  grbild wird mit dem Seitenaufruf übertragen und mit
                  grbild = location.search; extrahiert.

                  hier nochmal was ich am 19. Januar 2005, 11:18 geantwortet habe:
                  56 - 76 = Zeilennummern
                  funktionierende lösungen: 55+63+70+72 und 76 alleine
                  56-59 nur prüfmuster
                  Meine Fragen: leider erst am Ende geschrieben
                  Warum funktionieren zeilen 61+72  ;  66+72  ; 75  nicht?
                  nicht genannte zeilen bitte übersehen, in der not frißt der teufel fliegen. ich habe einfach experimentiert, um rauszufinden wie das system reagiert, daher die ergebnisse auch in den kommentaren.
                  zeile 61 korrigiert in
                  d.src = grbild.substring(1);   //b = falsch = href/rb = ..substring(1, 2) = kein Bild
                  trotzdem gleiches ergebnis wie alte schreibweise.
                  es muß einen unterschied in der verarbeitung der zeilen 61, 66 und der zeile 63 geben, den ich mir nicht erklären kann.
                  die schreibweise ist meine ich formal richtig. die variable e wird richtig ermittelt. kannst du prüfen mit url oben.
                  danke