Jens: Objektname als Variable

Hallöchen liebe Leute,

ich bin noch recht grün mit dem Java-Scripten und deshalb mögen die Cracks hier im Forum mir verzeihen. Selbstverständlich habe ich die Such-Funktion bemüht bin aber dort nicht so recht schlau geworden.

Mein Problem:

Statt eine Grafik mit der fortlaufenden Nummerierung (also window.document.images[nummer].src = Bildname.src ) anzusprechen soll es über den Objektnamen gehen.

Ich habe also eine Grafik mit

<img blabla name="alfred">.

Klar kann ich die mit

window.document.alfred.src = Bildname.src;

direkt ansprechen. Jetzt habe ich aber mehrere Grafiken deren Objektnamen ich als Variable in eine Funktion übergeben will. Blauäugig schrub ich also

function Bildwechsel(Objektname,Bildname)
{window.document.Objektname.src = Bildname.src;}

in der Hoffnung daß wenn die Variable "Objektname" bspw. "alfred" enthält, dann die entsprechene Grafik angesprochen wird. Wird aber nicht, es tut sich nichts.

Bin dankbar für jeden Hinweis,

beste Grüsse,

Jens

  1. Hallo Jens,

    function Bildwechsel(Objektname,Bildname)
    {window.document.Objektname.src = Bildname.src;}

    Du übergibst hier einen String: 'alfred'. In Deinem Objektzugriff steht dann so ungefähr: window.document.'alfred'.src - das geht nicht. Versuchs mal mit eval(), da kannst Du Strings und Objekte mit '+' kombinieren und aus dem Ganzen ein Objekt zaubern.

    Gruß, Andreas

    1. Du übergibst hier einen String: 'alfred'. In Deinem Objektzugriff steht dann so ungefähr: window.document.'alfred'.src - das geht nicht. Versuchs mal mit eval(), da kannst Du Strings und Objekte mit '+' kombinieren und aus dem Ganzen ein Objekt zaubern.

      eval ist in 99% aller Fälle überflüssig und absolut schädlich. Es ist langsam, man kann schlecht Fehler finden und es ist unnötig.

      Versuch's mal mit: window.document['alfred'].src

      Struppi.

      1. Nach einigem rumprobieren hatte ichs dann :

        Die Funktion heißt jetzt

        function Bildwechsel(Objektname,Bildname) {
         bildobjekt=eval(Objektname);
         bildobjekt.src = Bildname.src; }

        und aufgerufen wird sie mit

        <a onMouseOver="Bildwechsel(alfred,neuesbild)" ...

        also macht "eval" aus "alfred" tatsächlich "window.document.alfred"

        Einfacher als man denkt...

        Besten Dank,

        Gruß,

        Jens

        1. also macht "eval" aus "alfred" tatsächlich "window.document.alfred"

          Einfacher als man denkt...

          das ist aber Mist!

          eval ist hier nicht nötig und macht das Skript Fehleranfällig und um einiges langsamer. Zumal das in normalen Browsern nicht funktioniert, was du das machst.

          function Bildwechsel(Objektname,Bildname) {
          bildobjekt= window.document[Objektname];
          bildobjekt.src = Bildname.src;
          }

          struppi.

  2. Hallo Jens,

    window.document.alfred.src = Bildname.src;

    ist Unsinn!

    * * *

    html:

    <a href="#" onmouseover="change_image(alfred,'alfred_1.jpg');" onmouseout="change_image(alfred,'alfred_0.jpg');"><img name="alfred" src="alfred_0.jpg" border="0" alt="" /></a>

    • img-name/-src natürlich durch eigene Angaben/Pfade ersetzen, auch in der Funktion!
    • Der img-name darf der Funktion NICHT in Anführungszeichen übergeben werden, sonst wird aus dem Objekt ein String!

    * * *

    javascript:

    function change_image(imageID,imageSrc) {
            imageID.src=imageSrc;}

    * * *

    Gruß,
    Kurt

    1. Ja hallöchen

      das ist ja noch einfacher...

      statt

      window.document.alfred.src = Bildname.src;

      muß es einfach nur heißen

      alfred.src = Bildname.src;

      JavaScript kann so einfach sein...

      Grunz - nun ja ich bin ja noch am lernen

      Besten Dank + beste Grüße,

      Jens

      1. Ja hallöchen

        das ist ja noch einfacher...

        statt

        window.document.alfred.src = Bildname.src;

        muß es einfach nur heißen

        alfred.src = Bildname.src;

        Das ist falsch!

        standardmäßig spricht dein Browser immer window.... an, dann heißt dein obiges Beispiel window.alfred.src = Bildname.src;

        d.h in deinem konkreten Falle wird aus der Zuweisung:

        window.alfred.src = window.alfred.src;

        Was du aber nciht willst. Probier es einfach mal in einem richtigen Browser aus.

        <script type="Text/JavaScript">

        alfred = "ich bin alfred";
        function test()
        {
            alert(alfred);
            alert(window.alfred);
            alert(window.document.alfred);
        }

        </script>
        </head>

        <body >
        <img width="100" height="100" src="test.jpg" name="alfred" onclick="return test();">
        </body>

        </html>

        struppi.

        1. Ja hallöchen

          das ist ja noch einfacher...

          statt

          window.document.alfred.src = Bildname.src;

          muß es einfach nur heißen

          alfred.src = Bildname.src;

          Das ist falsch!

          Hm ja pardon aber es funzt doch? Und ist identisch mit dem was Kurt Felix postete?

          Was ist ein "richtiger" Brauser? Ich hudel mit Mozilla und IE, ab und zu noch mit Opera und selbst da läufts.

          Es mag ja sein ( und ist garantiert auch so ) daß das für Puristen bzw. Validatoren Nonsens ist was ich da so zusammenprogrammiere aber solange es mit diesen drei Brausern läuft ist mir das wurscht.

          Ich gebe aber gerne zu : Ich habe (noch, so Gott will) ein erhebliches Verständnisproblem mit der Java-Syntax bzw. mit dessen Sprach-Struktur und würde gerne absolut "sauberen" Quellcode ins Netz stellen.

          Wo zur Hölle ist bspw. der Unterschied zwischen

          window.document.alfred.src,
          window.alfred.src,

          und

          alfred.src ?

          Besten Dank für Aufklärung + beste Grüße,

          Jens

          1. Wo zur Hölle ist bspw. der Unterschied zwischen

            window.document.alfred.src,
            window.alfred.src,

            und

            alfred.src ?

            Ganz einfach ...

            window.document.alfred.src
            oder
            window.alfred.src

            ... funktionieren nicht!

            * * *

            Wo hingegen ...

            document.images["alfred"].src
            -> "alfred" muss ein String sein, nicht das Objekt!

            funktioniert!

            Gruß,
            Kurt

          2. Hm ja pardon aber es funzt doch? Und ist identisch mit dem was Kurt Felix postete?

            Das ja auch schon falsch war.

            Wo zur Hölle ist bspw. der Unterschied zwischen

            window.document.alfred.src,
            window.alfred.src,

            und

            alfred.src ?

            Du hast das Beispiel nicht ausprobiert?

            OK:

            window.document.alfred.src,

            hier sprichst du ein attribut des Objektes alfred an, das ein Objekt von document ist, dass wiederrum ein Unterobjekt von window ist.

            window.alfred.src,

            hier sprichst du ebenfalls ein Attribut des Objektes alfred an, das aber in deisem Falle ein Unterobjekt von window ist.

            alfred.src ?

            Hier wird self.alfred angesprochen und self ist in diesem Falle window, d.h. Fall 2 und 3 sind gleich sprechen aber nicht das Bild an, dass ja ein Teil des Dokumentes ist.

            Struppi.

      2. Hallo Jens,

        alfred.src = Bildname.src;

        Eben NICHT Bildname.src, sondern NUR Bildname!

        alfred.src=Bildname;

        Wenn Du Deine Bilder in einem separaten Ordner ablegst - was zu empfehlen ist - dann muss dies natürlich noch ergänzt werden:

        alfred.src="Pfad/"+Bildname;

        Gruß,
        Kurt