julia: Mouseover Slideshow in verschiedenen Frames

hallo allerseits,

ich muss gleich gestehen, ich kann kein javascript. ich kann fertige skripte einbinden und verstehe auch einigermassen, wie sie funktionieren, aber ich hatte immer ein 5 in mathe und deshalb kann ich skripte nur sehr schwer wirklich "nachvollziehen", geschweige den schreiben.
deshalb habe ich mich jetzt auch druchgerungen um hilfe zu bitten. ich mache eine website für mein kleines architekturbüro und habe folgende problem: mein seitenlayout basiert auf frames und ich habe nun in einem frame eine tabelle mit thumbnails [framename=toolbox] und möchte bei mouseover über einen thumbnail in einem anderen frame [framename=projektor] jeweils das vergösserte bild sehen. bei onclick auf den thumbnail soll im frame "projektor" dann eine slideshow starten, bei der ich mich durch alle fotos klicken kann.

ich habe mir folgendes script ergoogelt http://www.javascriptkit.com/script...different.shtml um das zu realisieren, aber ich kriege es a) nicht hin, aus dem frame "toolbox" die funktion ChangeImage() aufzurufen und b) weiss ich dann nicht mehr, wie ich die slideshow intergrieren soll.

ich weissich weiss, das ist viel verlangt an selbstloser beratung aber die hoffnung stirbt zuletzt...
und vielleicht kann ich mich ja mit einem rezept für ein wahnsinnig gutes thaicurry revanchieren?

julia, neu hier & verzweifelt.

  1. Hallo Julia,

    bitte ergreife etwas mehr Eigeninitiative und lerne: http://de.selfhtml.org/javascript/, http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm

    ...aber die hoffnung stirbt zuletzt...

    Na dann hoffe ich mal, daß Du nicht nur Rezepte verteilen kannst, sondern auch lernwillig bist, statt Gründe in schlechten Mathe-Noten zu suchen.

    Gruß aus Berlin!
    eddi

    1. bitte ergreife etwas mehr Eigeninitiative und lerne: http://de.selfhtml.org/javascript/, http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm

      siehst du, das dachte ich mir, dass sowas zurück kommt wie "dann lerns halt" & dass sich dann die diskussion verselbständigt & es nicht mehr um meine frage geht sondern nur darum, wie ich übehaupt dazu komme..und ich soll doch selber... und wie kann ich....& überhaupt blablabla.
      ich selber versuche in foren den leuten zu helfen & wenn  mich die frage nervt, dann lass ich es.

      ...aber die hoffnung stirbt zuletzt...

      DESHALB stirbt die Hoffnung genau JETZT.

      Na dann hoffe ich mal, daß Du nicht nur Rezepte verteilen kannst, sondern auch lernwillig bist, statt Gründe in schlechten Mathe-Noten zu suchen.

      erzähl du mir nichts von lernwillig, ich hab mir schon den ganzen html/css-käse beigebracht & ich weiss wo meine grenzen sind. aber ich werden gerne deinem beispiel folgen & dem nächsten der mich nach einer bauplanung fragt sagen hey, sei doch nicht so faul & schau doch mal unter www.bausdirselber.de.

      puh.

      Gruß aus Berlin!
      eddi

  2. Hallo Julia,

    ich muss gleich gestehen, ich kann kein javascript.

    das ist keine Schande - es sei denn, du würdest dich einfach hinstellen und sagen, "Mach mal bitte, cih kann das nicht". Solange du selbst mitarbeitest und dich bemühst, schubsen wir dich auch gern in die richtige Richtung.

    ich hatte immer ein 5 in mathe und deshalb kann ich skripte nur sehr schwer wirklich "nachvollziehen", geschweige den schreiben.

    Das hat, wie eddi schon bemerkte, nur wenig miteinander zu tun.

    mein seitenlayout basiert auf frames ...

    Oh. Eine schlechte Voraussetzung. Frames schaffen in der Regel mehr Probleme als sie lösen.

    ich habe mir folgendes script ergoogelt http://www.javascriptkit.com/script...different.shtml

    Das kann ich nun mangels vollständiger URL nicht ganz nachvollziehen.

    ich kriege es a) nicht hin, aus dem frame "toolbox" die funktion ChangeImage() aufzurufen

    parent.projektor.ChangeImage() ?
    Bei verschachtelten Framesets evtl. auch top.projektor.ChangeImage().

    und b) weiss ich dann nicht mehr, wie ich die slideshow intergrieren soll.

    Das ist wohl auch eine aufwendigere Geschichte - es sei denn, das Script, das du als Grundlage verwendest, hätte diese Funktionalität auch schon integriert. Dann solltest du aber noch etwas präzisere Angaben machen.

    und vielleicht kann ich mich ja mit einem rezept für ein wahnsinnig gutes thaicurry revanchieren?

    Hmm, klingt verlockend... ;-)

    julia, neu hier & verzweifelt.

    Das "neu hier" gibt sich bald; das "verzweifelt" hoffentlich auch.

    Schönen Abend noch,
     Martin

    --
    Wenn man keine Ahnung hat - einfach mal Fresse halten.
      (Dieter Nuhr, deutscher Kabarettist)
    1. Hallo Martin,

      erstmal danke für deine netten Worte.

      ich hatte immer ein 5 in mathe und deshalb kann ich skripte nur sehr schwer wirklich "nachvollziehen", geschweige den schreiben.

      Das hat, wie eddi schon bemerkte, nur wenig miteinander zu tun.

      ...das hat meines erachtens viel damit zu tun, denn dieses gefühl völliger verwirrung und verzweiflung kenne ich eigentlich nur aus dem matheunterricht.

      ich werde das problem jetzt mal konkreter schildern:

      ich habe ein frameset und will eine funktion in frame 4 (d.html) aus frame 1 (a.html) aufrufen. leider klappt es nicht, obwohl das skript ja ganz einfach ist.

      es sieht so aus:

      <frameset rows="260,30,*">
      <frameset cols="*,*">
      <frame name="frame1" src="a.html" >
      <frame name="frame2" src="b.html">
      </frameset>
      <frame name="frame3" src="c.html">
      <frame name="frame4" src="d.html">
      <noframes>

      <body bgcolor="#ffffff">
      <p></p>
      </body>
      </frameset>

      in d.html habe ich (vereinfacht):

      <script language="JavaScript">
      function changeimage(towhat,url){
      if (document.images){
      document.images.targetimage.src=towhat.src
      gotolink=url
      }
      </script>

      in a.html habe ich einen link, der die funktion in d.html in frame 4 aufrufen soll:

      <a href="#" onmouseover="top.frame4.changeimage(myimages[3],this.href)">

      ..und das klappt nicht, auch wenn ich mich auf den kopf stelle. die funktion in d.html lässt sich von einem link auf derselben seite problemlos ausführen, also das fuktioniert. was nicht geht ist also die "fernbedienung" aus frame1.

      hilfe. ich drehe durch.

      danke, julia

      1. Hallole,

        erstmal danke für deine netten Worte.

        :-)

        ich habe ein frameset und will eine funktion in frame 4 (d.html) aus frame 1 (a.html) aufrufen. leider klappt es nicht, obwohl das skript ja ganz einfach ist.

        Ich habe den Verdacht, dass das Aufrufen der Funktion sehr wohl klappt - aber dazu gleich mehr. Mit welchem Browser testest du denn eigentlich? Lass es nicht den IE sein; der ist zum Debuggen von Javascript denkbar ungeeignet, weil er bei Fehlern oft recht wortkarg ist und das bisschen Information auch noch oft missverständlich ist. Da ist der Mozilla/Firefox empfehlenswert: Seine Javascript-Konsole gibt recht detaillierte Hinweise.
        Welche Hinweise gibt sie denn bei deinem Projekt?

        <frameset cols="*,*">

        Na, das ist mal 'ne flexible Angabe: Mach mir ein Frameset mit zwei Spalten, egal wie breit. ;-)

        in d.html habe ich (vereinfacht):
        <script language="JavaScript">

        Hier fehlt das vorgeschriebene type-Attribut (type="text/javascript"), aber das ist für dein Problem nicht relevant.

        function changeimage(towhat,url){
        if (document.images){
        document.images.targetimage.src=towhat.src
        gotolink=url
        }

        Aha. Als 'towhat' übergibst du dann wohl ein image-Objekt, und der Parameter 'url' wird nur einfach irgendwo gespeichert. Ein Bild mit dem Attribut name="targetimage" existiert auch im Dokument?

        <a href="#" onmouseover="top.frame4.changeimage(myimages[3],this.href)">

        Das sieht syntaktisch und logisch richtig aus und sollte nach meiner Einschätzung eigentlich funktionieren. Hast du mal mit einem alert() in der Funktion changeimage() überprüft, ob sie wirklich aufgerufen wird? Falls ja, könnte der Fehler noch in der Parameterübergabe liegen, z.B. dass myimages[3] eben kein image-Objekt ist.
        By the way, das '#' als Linkziel ist ja auch nicht besonders schlau - oder dient das hier im Beispiel nur als Platzhalter?

        ..und das klappt nicht, auch wenn ich mich auf den kopf stelle.

        Das stelle ich mir lustig vor... *g*

        die funktion in d.html lässt sich von einem link auf derselben seite problemlos ausführen, also das fuktioniert. was nicht geht ist also die "fernbedienung" aus frame1.

        Das ist echt mysteriös. Ich glaube, es ist das Beste, wenn du mal eine Testversion vom gesamten Projekt online stellst, dass man das mal "live" nachvollziehen kann.

        Schönen Tag noch,
         Martin

        --
        Der Gast geht solange zum Tresen, bis er bricht.
        1. Gute Morgen und vielen Dank schon mal für die Hilfe.
          »

          Mit welchem Browser testest du denn eigentlich? Lass es nicht den IE sein; der ist zum Debuggen von Javascript denkbar ungeeignet, weil er bei Fehlern oft recht wortkarg ist und das bisschen Information auch noch oft missverständlich ist. Da ist der Mozilla/Firefox empfehlenswert: Seine Javascript-Konsole gibt recht detaillierte Hinweise.

          Ich habe bisher mit der Vorschaufunktion von Golive getestet, ich wusste gar nichts von einer Javascript-Konsole.

          Welche Hinweise gibt sie denn bei deinem Projekt?

          Nachdem ich das nun ausprobiert habe sagt sie "towhat not defined" und "myimages not defined".

          »

          function changeimage(towhat,url){
          if (document.images){
          document.images.targetimage.src=towhat.src
          gotolink=url
          }

          Aha. Als 'towhat' übergibst du dann wohl ein image-Objekt, und der Parameter 'url' wird nur einfach irgendwo gespeichert. Ein Bild mit dem Attribut name="targetimage" existiert auch im Dokument?

          ja, das existiert.

          <a href="#" onmouseover="top.frame4.changeimage(myimages[3],this.href)">

          Das sieht syntaktisch und logisch richtig aus und sollte nach meiner Einschätzung eigentlich funktionieren. Hast du mal mit einem alert() in der Funktion changeimage() überprüft, ob sie wirklich aufgerufen wird?

          nein, hab ich nicht. aber das wäre einen versuch wert.
          Falls ja, könnte der Fehler noch in der Parameterübergabe liegen, z.B. dass myimages[3] eben kein image-Objekt ist.
          aber wieso klappt die funktion dann, wenn man sie von der d.html selber aufruft?
          ich habe ja eine vermutung, vielleicht kannst du mir sagen, ob die stimmen könnte: die funktion die ich aus frame1 aufrufen will, befindet sich ja in d.html. d.html wurde wiederum vorher durch eine funktion parent.frame4.location="d.html" in frame4 geladen. wo "sucht" den der aufruf top.frame4.changeimage(...) nach der funktion? in der aktuell in frame4 geladenen seite oder in der seite, die im frameset als scr. ursprünglich angegeben war? dann ist klar, warum er die funktion nicht findet, weil sich ja der inhalt von frame4 geändert hat.
          macht das sinn oder ist das totaler quatsch?

          By the way, das '#' als Linkziel ist ja auch nicht besonders schlau - oder dient das hier im Beispiel nur als Platzhalter?

          ;), ist nur ein plazthalter...

          ..und das klappt nicht, auch wenn ich mich auf den kopf stelle.

          Das stelle ich mir lustig vor... *g*

          das ist nicht lustig sondern eher trauig... *gg*

          die funktion in d.html lässt sich von einem link auf derselben seite problemlos ausführen, also das fuktioniert. was nicht geht ist also die "fernbedienung" aus frame1.

          eben. das spricht doch dafür, dass die funktion einfach nicht gefunden wird!

          Das ist echt mysteriös. Ich glaube, es ist das Beste, wenn du mal eine Testversion vom gesamten Projekt online stellst, dass man das mal "live" nachvollziehen kann.

          das mache ich gerne, aber wie kann man den daran was erkennen? man sieht doch immer nur das fameset im quelltext, oder?

          Schönen Tag noch,
          Martin

          Dir auch,
          Julia

          1. Hallo Julia,

            Ich habe bisher mit der Vorschaufunktion von Golive getestet, ich wusste gar nichts von einer Javascript-Konsole.

            ups. Nichts gegen verbreitete Tools - aber sie ersetzen nicht den Test in echten Browsern.

            ich habe ja eine vermutung, vielleicht kannst du mir sagen, ob die stimmen könnte: die funktion die ich aus frame1 aufrufen will, befindet sich ja in d.html. d.html wurde wiederum vorher durch eine funktion parent.frame4.location="d.html" in frame4 geladen. wo "sucht" den der aufruf top.frame4.changeimage(...) nach der funktion? in der aktuell in frame4 geladenen seite oder in der seite, die im frameset als scr. ursprünglich angegeben war?

            Immer im momentan geladenen Dokument. Ob das noch die Originalbelegung durch das src-Attribut ist oder zwischenzeitlich durch einen Link oder ein Script geladen wurde, ist egal. Von einem Dokument, das vorher mal in diesem Frame war, weiß der Browser zu diesem Zeitpunkt nichts mehr, das ist passé.

            dann ist klar, warum er die funktion nicht findet, weil sich ja der inhalt von frame4 geändert hat.

            Nein - wenn die Funktion in d.html liegt, und dieses Dokument auch momentan im angesprochenen Frame geladen ist, sollte sie auch gefunden werden.

            eben. das spricht doch dafür, dass die funktion einfach nicht gefunden wird!

            Stimmt. Warum auch immer.
            Wobei mir gerade einfällt, dass man Frames in JS ja auch noch über die frames[]-Collection ansprechen kann. Funktioniert der Zugriff mit
             top.frames['framename'].funktionsname(...)
            besser?

            [...] Projekt online stellst, dass man das mal "live" nachvollziehen kann.
            das mache ich gerne, aber wie kann man den daran was erkennen? man sieht doch immer nur das fameset im quelltext, oder?

            Nein, man kann ja auch den aktuellen Quelltext jedes einzelnen Frames in Aktion ansehen.

            Grüße aus Backnang,
             Martin

            --
            Heutzutage gilt ein Mann schon dann als Gentleman, wenn er wenigstens die Zigarette aus dem Mund nimmt, bevor er eine Frau küsst.
              (Barbra Streisand, US-Schauspielerin)
            1. Hallo Martin,

              wo ist denn Backnang?? Danke für deine Hilfe, das gibt mir neuen Mut.

              eben. das spricht doch dafür, dass die funktion einfach nicht gefunden wird!

              Stimmt. Warum auch immer.
              Wobei mir gerade einfällt, dass man Frames in JS ja auch noch über die frames[]-Collection ansprechen kann. Funktioniert der Zugriff mit
              top.frames['framename'].funktionsname(...)
              besser?

              nein, das habe ich auch schon versucht- selbes ergebnis. der alert den ich eingebaut habe funktioniert auch nicht bzw. nur von meinem testlink auf derselben seite.

              [...] Projekt online stellst, dass man das mal "live" nachvollziehen kann.
              das mache ich gerne, aber wie kann man den daran was erkennen? man sieht doch immer nur das fameset im quelltext, oder?

              Nein, man kann ja auch den aktuellen Quelltext jedes einzelnen Frames in Aktion ansehen.

              hier habe ich mal nur das frameset reingestellt: test. Das Bild unten sollte sich bei Mouseover über den Lageplan (1stes Thumbnail, 2te Reihe)austauschen- eben genauso wie es bei Mouseover über den "test"-Link geschieht.

              Grüße aus Backnang,
              Martin

              Grüsse aus München
              Julia

              1. Hi,

                wo ist denn Backnang??

                Ungefähr 30km nordöstlich von Stuttgart. Etwa 35000 Einwohner, früher bedeutende Gerberstadt, heute kleines ein High-Tech-Städtchen, Wiege der Telekommunikation. Idyllisch gelegen an der Murr...

                Danke für deine Hilfe, das gibt mir neuen Mut.

                Und Mut wird belohnt. Manchmal jedenfalls.

                hier habe ich mal nur das frameset reingestellt: test. Das Bild unten sollte sich bei Mouseover über den Lageplan (1stes Thumbnail, 2te Reihe)austauschen- eben genauso wie es bei Mouseover über den "test"-Link geschieht.

                Und siehste, das Live-Beispiel hat nun viel mehr gebracht als die Diskussion vorher. So sieht dein Link aus:
                <a href="#" onmouseover="top.projector.changeimage(myimages[3],this.href)"><img ...></a>
                Die Javascript-Konsole sagt, 'myimages' sei undefiniert - und sie hat Recht, weil diese Variable in einem ganz anderen Frame, nämlich in projector, definiert wird. Deswegen ist sie in 'Toolbox', wo der Aufruf steht, nicht verfügbar. Folge: Scriptfehler, Eventhandler wird nicht ausgeführt.

                Mein Vorschlag an dieser Stelle: Übergib nicht myimages[3], sondern nur den Index 3. Ändere dann *in der Funktion* den Ausdruck towhat.src in myimages[towhat].src. Dann bekommt die Funktion nicht das image-Objekt als Parameter, sondern nur den Index, und holt sich das entsprechende Objekt selbst aus dem myimages[]-Array.
                Zum Vergleich: Wenn mein Kollege aus dem Nachbarzimmer ruft, "Wo ist denn das Oszilloskop?", dann renne ich nicht ins Nebenzimmer, hole das Oszi aus dem Regal und stell es ihm auf den Tisch, sondern ich rufe nur zurück, "Im Regal ganz oben!". Soll er es doch selbst holen.

                Grüsse aus München

                Wo München ist, weiß ich!  ;-)

                Schönes Wochenende schonmal,
                 Martin

                --
                Wer im Steinhaus sitzt, soll nicht mit Gläsern werfen.
                1. Hi Martin,

                  Mein Vorschlag an dieser Stelle: Übergib nicht myimages[3], sondern nur den Index 3. Ändere dann *in der Funktion* den Ausdruck towhat.src in myimages[towhat].src. Dann bekommt die Funktion nicht das image-Objekt als Parameter, sondern nur den Index, und holt sich das entsprechende Objekt selbst aus dem myimages[]-Array.
                  Zum Vergleich: Wenn mein Kollege aus dem Nachbarzimmer ruft, "Wo ist denn das Oszilloskop?", dann renne ich nicht ins Nebenzimmer, hole das Oszi aus dem Regal und stell es ihm auf den Tisch, sondern ich rufe nur zurück, "Im Regal ganz oben!". Soll er es doch selbst holen.

                  Hurra! Ich hab das Oszilloskop gefunden! Es war im Regal! Hurra!
                  Aber im Ernst: du bist mein Held. Vielen Dank. Ich weiss zwar nicht genau, warum es jetzt funktioniert aber es geht. Danke dafür.
                  Möchtest du jetzt das Curry-Rezept?

                  Grüsse aus München

                  Wo München ist, weiß ich!  ;-)

                  Na bravo!

                  Schönes Wochenende schonmal,

                  Danke, das hab ich jetzt.

                  Martin

                  1. Hallo Julia,

                    Hurra! Ich hab das Oszilloskop gefunden! Es war im Regal! Hurra!

                    *lol*
                    Ich bin mir nicht sicher, ob du meinen Vergleich so verstanden hast, wie ich ihn eigentlich meinte, aber egal - wir haben ein Ergebnis, eine Lösung!

                    Aber im Ernst: du bist mein Held.

                    Hach, das geht mir jetzt runter wie Öl. Das brauch ich auch ab und zu. ;-)

                    Vielen Dank. Ich weiss zwar nicht genau, warum es jetzt funktioniert aber es geht. Danke dafür.

                    Kurz gesagt: Du wolltest eine Information übergeben (myimages[]), die du an der Stelle gar nicht zur Verfügung hast. Schau es dir in einer ruhigen Stunde nochmal an (bedenke dabei vor allem, dass ein Frame vom anderen fast nichts weiß), vielleicht wird es dir dann auch klar. Ich hoffe es.

                    Möchtest du jetzt das Curry-Rezept?

                    Na klar! ;-)
                    Ich weiß ja nicht, wie aufwendig es ist, ich bin auch nicht gerade der Starkoch. Für den Hausgebrauch reicht's, und wenn Besuch kommt, kriege ich einfache Menüs auch noch ganz gut hin.
                    Aber vielleicht kann und möchte ich ja mal jemand beeindrucken...

                    Schönen Abend noch,
                     Martin

                    PS: Solche wie dich braucht dieses Forum! Ob jung oder alt, Mann oder Frau, egal - Menschen, bei denen man merkt, dass sie auch mitarbeiten, und die hinterher auch ein positives Feedback geben. Dann hat sich der Aufwand auf jeden Fall gelohnt. Das ist auch für die Helfer eine Motivation.

                    --
                    Computer lösen für uns Probleme, die wir ohne sie gar nicht hätten.
  3. ...aber ich hatte immer ein 5 in mathe...ich mache eine website für mein kleines architekturbüro...

    Ne Fünf in Mathe und 'n Architekturbüro?

    RESPEKT!

    Ich hatte immer 'ne 3 und bin Angestellter bei einer telefonischen Kundenbetruung. (Wer hat hier "Call Agent" gesagt...?!)