Reiner Wirth: Mein Aufruf an die externe Lib arbeitet nicht

Hallo,

ich benutze eine externe javascript-Library für drag & drop-Aktionen

mit:<script type="text/javascript" src="wz_dragdrop.js"></script>

wenn ich mit:

<area title="Klick: abspielen | Doppelklick: anzeigen" onclick="clickTimer('dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()', '../Sound1/04Golo.html')" shape="rect" coords="664,300,738,332">

Paameter idEbne und idSound an meine javascript Funktion

function clickTimer(idEbene, idSound)
  {
   Ebene=idEbene;         // hier weiß ich nicht, warum ich das brauche
   Sound=idSound;        // zum Glück gehts trotzdem
   klicks++;
   tout = setTimeout('clickTest()',500);
  }
 klicks = 0, tout=null;

function clickTest()
  {
   clearTimeout(tout);
   if(klicks==1) {
 alert(Sound);
   parent.soundfrm.location.href = Sound;        //-> Sound abgespielen
   } else {
 alert(Ebene);
   parent.inhalt.location.href = Ebene;   //-> Ebenen-Fenster öffnen hier gehts nicht weiter
   }
   klicks = 0;
  }

übergebe, so werden sie zwar übernommen, das zeigen  alert(Ebene); und alert(Sound); , aber der Aufruf bewirkt in dem Frame "inhalt" nichts. Stört euch bitte zunächst nicht an meiner etwas obskuren Testmethode, um Einfach- und Doppelklick zu unterscheiden. Sie funktioniert in Firefox, Opera und Safari. Vielleicht durchschaut jemand, warum dieses "Gemurkse" überhaupt funktioniert. Es geht sicher eleganter.
Meine eigentliche Frage ist aber eine ndere.

Wenn ich direkt im Frame "inhalt"

<area title="anzeigen" onclick="dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()" shape="rect" coords="328,44,382,73"> schreibe

dann funktioniert der Aufruf.

Kann mir jemand weiterhelfen, den übergebenen und gelesenen Parameter Ebene in clickTest() ordentlich zu formulieren?

Reiner

  1. übergebe, so werden sie zwar übernommen, das zeigen  alert(Ebene); und alert(Sound); ,

    Also wenn ich das richit sehe, sind deine Werte Zahlen oder?
    Was soll deiner Meinung dann bei der Zuweisung als URL passieren?

    Kann mir jemand weiterhelfen, den übergebenen und gelesenen Parameter Ebene in clickTest() ordentlich zu formulieren?

    Kommt darauf an was diese machen sollen.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. hi,

      übergebe, so werden sie zwar übernommen, das zeigen  alert(Ebene); und alert(Sound); ,

      Also wenn ich das richit sehe, sind deine Werte Zahlen oder?

      Eher Strings, möchte ich meinen:

      onclick="clickTimer('dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()', '../Sound1/04Golo.html')"

      Die beiden Parameter, die als idEbene und idSound an die Funktion übergeben werden, sind also Strings.

      Was soll deiner Meinung dann bei der Zuweisung als URL passieren?

      Dass der in diesen Strings enthaltene Javascript-Code ausgeführt wird, könnte _evtl._ bei Zuweisung an location.href noch erreicht werden, wenn man das Pseudoprotokoll "javascript:" davorhängt.

      Dass es im anderen Fall "funktioniert", ist klar:

      onclick="dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()"

      Hier werden ja keine Strings an irgendeine Funktion übergeben, sondern hier wird Javascript-Code als Inhalt eines Eventhandler-Attributes notiert.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Dass der in diesen Strings enthaltene Javascript-Code ausgeführt wird, könnte _evtl._ bei Zuweisung an location.href noch erreicht werden, wenn man das Pseudoprotokoll "javascript:" davorhängt.
        gruß,
        wahsaga

        genau so ist es, es ist javascript-Code, um die Ebene zu positionieren und zu zeigen, nur bin ich zu blöd, das auszudrücken in meiner

        function clickTest()
          {
           clearTimeout(tout);
           if(klicks==1) {
         alert(Sound);
           parent.soundfrm.location.href = Sound;        //-> Sound abgespielen aus URL
           } else {
         alert(Ebene);   //bis hierhin habe ich meinen javascript-Code übergeben
           …     //hier soll jetzt dieser javascript-Code ausgeführt werden, der in Ebene als String übergeben wurde.
           }
           klicks = 0;
          }

        Sorry, aber ich stehe auf dem Schlauch…

        Reiner

        1. Dass der in diesen Strings enthaltene Javascript-Code ausgeführt wird, könnte _evtl._ bei Zuweisung an location.href noch erreicht werden, wenn man das Pseudoprotokoll "javascript:" davorhängt.
          gruß,
          wahsaga

          Hallo, vielleicht ist jemand noch da, der mir sagen kann, wie wahsaga das gemeint hat?

          meinen in Ebene übernommenen javascript-Code mit:

          1. Versuch:
          parent.inhalt.location.href = javascript:Ebene;

          auf den Frame inhalt anwenden?
          Fehlermeldung in Firefox

          2. Versuch:
          parent.inhalt.location.href = "javascript:Ebene";

          jetzt schreibt Fiefox den Code als String in den Frame. Keine Ausführung desselben.

          Gibt es noch mehr Möglichkeiten?

          Ihr würdet mir sehr helfen, wenn ihr nochmal vorbeischauen und kurz nach oben blättern würdet.

          Gruß Reiner

          1. meinen in Ebene übernommenen javascript-Code mit:

            Tut mir leid, aber da steckt zuviel Unkenntniss drin, um das mal eben hier zu beheben. Du musst noch einiges lesen.

            Ich vermute du willst Frame übergreifend JS Funktion aufrufen, dazu benötigst du kein location.href damit rufst du lefdiglich eine neue Seite auf.

            Gibt es noch mehr Möglichkeiten?

            Ja, du kannst direkt auf die Funktion über die Fensterreferenzen zugreifen.
            http://de.selfhtml.org/javascript/objekte/frames.htm und http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Ich vermute du willst Frame übergreifend JS Funktion aufrufen, dazu benötigst du kein location.href damit rufst du lefdiglich eine neue Seite auf.

              Gibt es noch mehr Möglichkeiten?

              Ja, du kannst direkt auf die Funktion über die Fensterreferenzen zugreifen.
              http://de.selfhtml.org/javascript/objekte/frames.htm und http://aktuell.de.selfhtml.org/artikel/javascript/fensterzugriff/

              Struppi.

              Geht es so, wie im Beispiel aus der Objektreferenz
              parent.NameDesFrames.Eigenschaft/Methode();

              parent.RechtesFenster.close();

              wäre bei mir:

              function clickTest()
              {
              clearTimeout(tout);
              if(klicks==1) {
              alert(Sound);
              parent.soundfrm.location.href = Sound;   //-> Sound abgespielen (das funktioniert bereits)!
              } else {
              alert(Ebene);                // bis hier komm ich auch noch und kann mir den Inhalt von Ebene zeigen lassen, aber jetzt!
              parent.inhalt.jsCall();    // Javascript aufrufen in frame inhalt
              }
              klicks = 0;
              }

              function jsCall()
              {
              ……                 //was hier rein muß, der Ausdruck von Ebene genau den kann ich nicht formulieren
              }

              z.B ergibt sich als Befehl, der schon in Ebene übergeben wurde:

              dd.elements.Bsp7Eheband.moveTo(dd.getScrollX()+700, dd.getScrollY()+150), dd.elements.Bsp7Eheband.show()

              hiermit wird eine div-Ebene positioniert und gezeigt

              so ein Befehl soll im frame Inhalt ausgeführt werden

              Denke ich in die richtige Richtung?

              Schönen Gruß

              Reiner

              1. Geht es so, wie im Beispiel aus der Objektreferenz
                parent.NameDesFrames.Eigenschaft/Methode();

                parent.RechtesFenster.close();

                ja.

                wäre bei mir:

                function clickTest()
                {
                clearTimeout(tout);
                if(klicks==1) {
                alert(Sound);
                parent.soundfrm.location.href = Sound;   //-> Sound abgespielen (das funktioniert bereits)!
                } else {
                alert(Ebene);                // bis hier komm ich auch noch und kann mir den Inhalt von Ebene zeigen lassen, aber jetzt!
                parent.inhalt.jsCall();    // Javascript aufrufen in frame inhalt

                irgendwie hab ich das Gefühl, du denkst über zuviele Ecken. Aber ich kann nicht  nicht mehr alles genau nachvollziehen (ich bin momentan sehr sehr unkonzentriert, 2. Tag ohne Rauch :-( )

                z.B ergibt sich als Befehl, der schon in Ebene übergeben wurde:

                dd.elements.Bsp7Eheband.moveTo(dd.getScrollX()+700, dd.getScrollY()+150), dd.elements.Bsp7Eheband.show()

                die Frage ist, in welchem window ist dd?

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. z.B ergibt sich als Befehl, der schon in Ebene übergeben wurde:

                  dd.elements.Bsp7Eheband.moveTo(dd.getScrollX()+700, dd.getScrollY()+150), dd.elements.Bsp7Eheband.show()

                  die Frage ist, in welchem window ist dd?

                  Struppi.

                  dd.elements.Bsp7…, …,… sind Funktions-Aufrufe an eine externe js-Library, eigentlcih müßte der String so wie er ist im Frame inhalt »abgefeuert« werden und anschließend erscheint dann eine Ebene im Frame.

                  Ich benutze eine Library drag amd drop aus der Site http://www.walterzorn.de/dragdrop/dragdrop.htm

                  Verstehst Du jetzt?

                  Gruß Reiner

                  1. dd.elements.Bsp7…, …,… sind Funktions-Aufrufe an eine externe js-Library, eigentlcih müßte der String so wie er ist im Frame inhalt »abgefeuert« werden und anschließend erscheint dann eine Ebene im Frame.

                    Tja, jetzt sind wir bei einem weiterem Verständnisproblem, nein es sind Funktionsaufrufe im aktuellen window, wie gesagt ich durchschau momentan deine Frmaesstruktur nicht, daher weiß ich nicht genau, was du wo ansprechen willst. Also ob dein Problem der Aufruf der Funktion oder die Referenzierung des Elementes ist. Aber eins weiß ich, du musst keinen "String feuern", sondern einfach eine Funktion aufrufen.

                    Ich benutze eine Library drag amd drop aus der Site http://www.walterzorn.de/dragdrop/dragdrop.htm

                    Verstehst Du jetzt?

                    Ja, das war mir klar, die Bibliothek ist mir bekannt.

                    Struppi.

                    --
                    Javascript ist toll (Perl auch!)
                    1. Tja, jetzt sind wir bei einem weiterem Verständnisproblem, nein es sind Funktionsaufrufe im aktuellen window, wie gesagt ich durchschau momentan deine Frmaesstruktur nicht, daher weiß ich nicht genau, was du wo ansprechen willst. Also ob dein Problem der Aufruf der Funktion oder die Referenzierung des Elementes ist. Aber eins weiß ich, du musst keinen "String feuern", sondern einfach eine Funktion aufrufen.

                      Struppi.

                      Ja klar, es sind Aufrufe der Funktion im aktuellen window

                      z.B.

                      dd.elements.Bsp10.show()  //zeigt die Ebene mit der id Bsp10
                      dd.getScrollY()                    //ermittelt die Scrollposition
                      oder auch

                      dd.elements.Bsp43.moveTo(dd.getScrollX()+690, dd.getScrollY()+270)

                      als verschachtelte Funktion

                      probiert hab ich:

                      parent.inhalt.(dd.elements.Bsp10.show()); das geht halt nicht so einfach.

                      Hilf mir bitte noch ein wenig, morgen, wenn wir ausgeschlafen sind.

                      Gruß Reiner

                      1. Ja klar, es sind Aufrufe der Funktion im aktuellen window

                        z.B.

                        dd.elements.Bsp10.show()  //zeigt die Ebene mit der id Bsp10
                        dd.getScrollY()                    //ermittelt die Scrollposition
                        oder auch

                        dd.elements.Bsp43.moveTo(dd.getScrollX()+690, dd.getScrollY()+270)

                        Ja, du musst einfach nur dir noch ein window. vornedran denken, das macht JS da von allein dran.
                        Also
                        window.dd.elements.Bsp43.moveTo(window.dd.getScrollX()+690, window.dd.getScrollY()+270)

                        parent.inhalt.(dd.elements.Bsp10.show()); das geht halt nicht so einfach.

                        Das ist halt die Frage, gibt es ein Objekt dd in dem Fenster parent.inhalt?
                        Wenn ja dann müßte es gehen, bzw. was heißt eigentlich nicht gehen, wie lautet genaue Fehlermeldung?

                        Könntest du nicht mal ein Beispiel online stellen?

                        Struppi.

                        --
                        Javascript ist toll (Perl auch!)
                        1. Tja, jetzt sind wir bei einem weiterem Verständnisproblem, nein es sind Funktionsaufrufe im aktuellen window, wie gesagt ich durchschau momentan deine Frmaesstruktur nicht, daher weiß ich nicht genau, was du wo ansprechen willst. Also ob dein Problem der Aufruf der Funktion oder die Referenzierung des Elementes ist. Aber eins weiß ich, du musst keinen "String feuern", sondern einfach eine Funktion aufrufen.

                          Struppi.

                          Hallo Struppi,

                          ich geh noch mal auf Deiner vorvorige Überlegung zurück und versuche, klarer
                          auszudrücken, was ich eigentlich will.

                          Mein Frameset

                          ******************************************************************************
                          *          frame navi           *         frame auswahl   *   frame soundfrm  *
                          *******************************************************************************
                          *    frame inhalt                                                        *
                          *
                          *     hier ist z.B. meine aktuelle Teil1.html  geladen sehr lang über (6000px)  *
                          *    mit vielen Bildern, Klickpunkten                                                                *
                          *                                                                                                                     *
                          *     //hier bin in ich und hier soll sich alles abspielen:                *
                          *                                                                                                                          *
                          *                                                                                                                           *
                          *    <script type="text/javascript" src="wz_dragdrop.js"></script>                       *
                          *    <script type="text/javascript"><!--    // meine    js-Funktionen                     *               *                                                                                                                             *
                          *    function stopSound(){  //-> um laufenden Sound zu stoppen, "Stille" laden     * parent.soundfrm.location.href = "../Sound1/stille.html";  //frameübergreifend   *
                          *   }                                                                                                                          *
                          *   document.ondblclick = stopSound;                                                                     *
                          *                                                                                                                                *
                          *   function clickTimer(idEbene, idSound)                                                                   *
                          * {                                                                                                                         *
                          * Ebene=idEbene;                                                                                                 *
                          *   Sound=idSound;                                                                                                 *
                          *  klicks++;                                                                                                            *
                          *   tout = setTimeout('clickTest()',500);                                                                    *
                          * }                                                                                                                          *
                          * klicks = 0, tout=null;                                                                                          *                                                                                                                            *
                          * function clickTest()                                                                                              *
                          *  {                                                                                                                          *
                          *   clearTimeout(tout);                                                                                              *
                          *  if(klicks==1) {                                                                                                     *
                          * // alert(Sound);                                                                                                   *
                          *  parent.soundfrm.location.href = Sound;        //-> Sound  frameübergreifend     *
                          *   } else {                                                                                                                 *
                          *   // alert(Ebene);  //in Ebene steht die DHTML Aufruf-Funktion zur Verfügung     *
                          *     callDHTMLFunktion(Ebene)     //vielleicht so ?                                                    *
                          * }                                                                                                                         *
                           *  klicks = 0;                                                                                                          *
                          *  }                                                                                                                          *
                          *                                                                                                                                *
                          *  function callDHTMLFunktion()                                                                                *
                          * {                                                                                                                          *
                          * // tja Struppi, hier muss halt jetzt was rein, jetzt du!!!                                        *
                          * }                                                                                                                          *
                          *                                                                                                                                *
                          *              das wärs eigentlich, warum kann ich das nicht alleine?                               *
                          *                                                                                                                                *
                          *               Danke für Deine Hilfe!                                                                               *
                          *               Gruß Reiner                                                                                               *
                          *                                                                                                                                *
                          *                                                                                                                                *
                          *************************************************************************************

                          1. ich geh noch mal auf Deiner vorvorige Überlegung zurück und versuche, klarer
                            auszudrücken, was ich eigentlich will.

                            Das ist immer noch nicht klar, soweit ich das verstehe willst du:
                            dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show() Zeitverzögert aufrufen und zwar im gleichen Frame.
                            und dir geht es um den String 'Bsp4Golo' d.h. die Ebene heißt (soweit ich das versteh) so. Also muss der aufruf so erfolgen:

                            clickTimer( 'Bsp4Golo' ..... );

                            und dann, wenn du wirklich über soviele Funktionen springen willst, in etwa so:

                            function callDHTMLFunktion(id)  
                            {  
                            dd.elements[id].moveTo( dd.getScrollX() + 50, dd.getScrollY() + 450);  
                            dd.elements[id].show()  
                            }
                            

                            wobei das nur ein Ansatz sein kann, die nicht klar ist was du wirklich vorhast. z.b. bietet die Bibliothek auch eine Reihe Callbackfunktionen für verschiedenste Aktionen.

                            Struppi.

                            --
                            Javascript ist toll (Perl auch!)
                            1. ich geh noch mal auf Deiner vorvorige Überlegung zurück und versuche, klarer
                              auszudrücken, was ich eigentlich will.

                              Das ist immer noch nicht klar, soweit ich das verstehe willst du:
                              dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show() Zeitverzögert aufrufen und zwar im gleichen Frame.

                              so ist es, es sind ja hier drei Aufrufe hintereinander, es reicht mir aber erst mal ein Funktionsaufruf z.B. dd.elements.Bsp4Golo.show(), – oder ist das kein Funktionsaufruf sondern etwas viel komplizierteres?  Offenbar wird ja alles wieder auseinander genommen im call

                              Bsp4Golo ist mein aktueller Wert für den Layer-Namen, mit dem gearbeitet wird.

                              und dir geht es um den String 'Bsp4Golo' d.h. die Ebene heißt (soweit ich das versteh) so. Also muss der aufruf so erfolgen:

                              clickTimer( 'Bsp4Golo' ..... );

                              Nein! Im clickTimer wird jetzt 'dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()' übergeben, der ganze Salat zum zeigen, positionieren und zum zeigen. Die Sache mit dem clickTimer funktioniert ja, die Variable idEbene enthält bereits den ganzen string, die Funktionen für DHTML,
                              ich denke doch, dass das gehen sollte

                              Ich war davon ausgegangen, dass, wenn es gelänge dasselbe, was ja auch sukzessiv abgearbeitet wird, wenn ich ganz normal im body mit

                              <area title="Ebene zeigen" onclick="dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()" shape="rect" coords="328,44,382,73">

                              event gesteuert arbeite auch als callDHTMLFunktion(id) formuliert werden kann.
                              Bin ich da zu tollkühn?

                              und dann, wenn du wirklich über soviele Funktionen springen willst, in etwa so:

                              function callDHTMLFunktion(id)

                              {
                              dd.elements[id].moveTo( dd.getScrollX() + 50, dd.getScrollY() + 450);
                              dd.elements[id].show()
                              }

                              
                              >   
                                
                              das bedeutet, daß ich alle Details wie +50 (mein gewünschter xOffset für einen bestimmten Aufruf) und +450 (yOffset) auch getrennt übergeben muß, aber wenn Du meinst, es geht nicht anders, muss ichs halt machen, dann sind es 3 Varablen Ebenen-Name, xOffset und yOffset, alles andere ist ja festgelegte Syntax.  
                                
                              
                              > wobei das nur ein Ansatz sein kann, die nicht klar ist was du wirklich vorhast. z.b. bietet die Bibliothek auch eine Reihe Callbackfunktionen für verschiedenste Aktionen.  
                                
                              wenn ich nur wüßte, was Callbackfunktionen sind, gibts da was in SELFHTML zu lesen?  
                                
                              
                              >   
                              > Struppi.  
                                
                                
                              Vielen Dank für die Wegbeschreibung und sorry über das zerhackte Layout, plötzlich war allles schon weg, bevor ich zu Ende war mit meinem Edieren  
                                
                              Gruß Reiner
                              
                            2. und dann, wenn du wirklich über soviele Funktionen springen willst, in etwa so:

                              function callDHTMLFunktion(id)

                              {
                              dd.elements[id].moveTo( dd.getScrollX() + 50, dd.getScrollY() + 450);
                              dd.elements[id].show()
                              }

                              
                              >   
                              > wobei das nur ein Ansatz sein kann, die nicht klar ist was du wirklich vorhast. z.b. bietet die Bibliothek auch eine Reihe Callbackfunktionen für verschiedenste Aktionen.  
                              >   
                              > Struppi.  
                                
                                
                              Gratuliere! Struppi, du bist ein wunderbarer Lehrer, vielen Dank.  
                              Ich bin immer an meiner "Hauruck-Methode" gescheitert. Jetzt mit 3 Variablen klappt alles super  
                                
                              Einen kleinen Schönheitsfehler bei der Übergabe der Variablen gibts noch bei meiner Funktions-Springerei  
                                
                              ~~~javascript
                              function clickTimer(idEbene, xOff, yOff, idSound)  
                              {  
                              Ebene=idEbene;       // unschön! weil doppelt gemoppelt  
                              Sound=idSound;      // unschön! weil doppelt gemoppelt  
                              xO=xOff;                // unschön! weil doppelt gemoppelt  
                              yO=yOff;                // unschön! weil doppelt gemoppelt  
                              klicks++;  
                              tout = setTimeout('clickTest()',500);  
                              }  
                              klicks = 0, tout=null;  
                                
                              function clickTest()  
                              {  
                              clearTimeout(tout);  
                              if(klicks==1) {  
                              parent.soundfrm.location.href = Sound;        //-> Sound abgespielen  
                              } else {  
                              callDHTML(Ebene, xO, yO);  
                              }  
                              klicks = 0;  
                              }  
                                
                              function callDHTML(id, xO, yO)  
                              {  
                              dd.elements[id].moveTo(dd.getScrollX() + xO, dd.getScrollY() + yO);  
                              dd.elements[id].show()  
                              }
                              

                              ich habs markiert, dort übergebe ich nochmal
                              idEbene an Ebene
                              idSound an Sound
                              xOff an xO und
                              yOff an yO

                              offenbar sind in clickTest die Variablen undefiniert, wenn ich aber diesen zugegebenermaßen blöden Trick mit der Gleichsetzung anwende tut alles.

                              Ich könnte mir aber denken, dass nicht alle Browser da mitmachen, deshalb frag ich lieber noch mal, Du merkst ja ohnehin, dass ich ein Anfänger bin.

                              Vielleicht noch ein kleiner Tipp über die Verwendung von Variablen?

                              Gruß und Dank

                              Reiner

                              1. Gratuliere! Struppi, du bist ein wunderbarer Lehrer, vielen Dank.
                                Ich bin immer an meiner "Hauruck-Methode" gescheitert. Jetzt mit 3 Variablen klappt alles super

                                Ich hatte schon Angst es klappt nicht mehr ;-)

                                Einen kleinen Schönheitsfehler bei der Übergabe der Variablen gibts noch bei meiner Funktions-Springerei

                                Vor allem wegen dem Timeout.

                                Da Parameter nur in der Funktion lokal sichtbar sind, bleibt dir erstmal anderer Weg. Wobei aber globale Variabeln vermieden werden sollten und daher solch ein Ansatz gut wäre:

                                function clickTimer(idEbene, xOff, yOff, idSound)  
                                {  
                                klicks++;  
                                setTimeout( function()  
                                {  
                                var Ebene=idEbene;  
                                var Sound=idSound;  
                                var xO=xOff;  
                                var yO=yOff;  
                                  
                                if(klicks==1) {  
                                 parent.soundfrm.location.href = Sound;        //-> Sound abgespielen  
                                 } else {  
                                 callDHTML(Ebene, xO, yO);  
                                }  
                                klicks = 0;  
                                } ,500);  
                                }  
                                var klicks = 0, tout=null;  
                                
                                

                                (wobei ich nicht sicher bin mit dem klicks++ und klicks = 0, ich hab den Eindruck so passiert nur das mit dem sound)

                                Zum Verständniss, dass ist eine anonyme Funktion, die aufgerufen wird, wenn der Timeout abläuft.

                                Ich könnte mir aber denken, dass nicht alle Browser da mitmachen, deshalb frag ich lieber noch mal,

                                doch, das war schon richtig.

                                Struppi.

                                --
                                Javascript ist toll (Perl auch!)
                                1. Da Parameter nur in der Funktion lokal sichtbar sind, bleibt dir erstmal anderer Weg. Wobei aber globale Variabeln vermieden werden sollten und daher solch ein Ansatz gut wäre:

                                  function clickTimer(idEbene, xOff, yOff, idSound)

                                  {
                                  klicks++;
                                  setTimeout( function()
                                  {
                                  var Ebene=idEbene;
                                  var Sound=idSound;
                                  var xO=xOff;
                                  var yO=yOff;

                                  if(klicks==1) {
                                  parent.soundfrm.location.href = Sound;        //-> Sound abgespielen
                                  } else {
                                  callDHTML(Ebene, xO, yO);
                                  }
                                  klicks = 0;
                                  } ,500);
                                  }
                                  var klicks = 0, tout=null;

                                  
                                  > (wobei ich nicht sicher bin mit dem klicks++ und klicks = 0, ich hab den Eindruck so passiert nur das mit dem sound)  
                                  >   
                                  > Zum Verständniss, dass ist eine anonyme Funktion, die aufgerufen wird, wenn der Timeout abläuft.  
                                  > Struppi.  
                                    
                                  Hallo Struppi, kannst Du bitte da nochmal drauf gucken, ob das alles so richtig war, was Du geschrieben hast oder ist das ein paar Nummern zu hoch für mich.  
                                    
                                  z.B die Zeile  
                                    
                                  setTimeout( function()  
                                  bleibt da dann stehen?  
                                  tout = setTimeout( ,500);   //da ja jetzt clickTest wegfallen kann?  
                                    
                                  denn tout kommt dann nur noch einmal bei  
                                  var klicks = 0, tout=null;  
                                    
                                   } ,500); ist da etwas verloren gegangen? oder kann ,500 hier weg?  
                                    
                                  Gruß Reiner
                                  
                                  1. Hallo Struppi, kannst Du bitte da nochmal drauf gucken, ob das alles so richtig war, was Du geschrieben hast oder ist das ein paar Nummern zu hoch für mich.

                                    z.B die Zeile

                                    setTimeout( function()
                                    bleibt da dann stehen?
                                    tout = setTimeout( ,500);   //da ja jetzt clickTest wegfallen kann?

                                    ja.

                                    denn tout kommt dann nur noch einmal bei

                                    tout ist unwichtig.

                                    var klicks = 0, tout=null;

                                    Das sollte ganz ausserhalb stehen, da es globale Variabeln sind aber tout wird nicht mehr gebraucht.

                                    } ,500); ist da etwas verloren gegangen? oder kann ,500 hier weg?

                                    nein.

                                    Der Punkt ist, statt clickTest() wird eine anonyme Funktion verwendet, vom Prinzip sieht das so aus:

                                    window.setTimeout(  
                                       // hier beginnt die anon. Funkt.  
                                       function() {  
                                          // Funktionkörper,  
                                          // also das was in clickTest steht  
                                          //plus den Variabeln die du verdoppeln musst  
                                          ...  
                                       }, 500 // ms wann der aufruf der Funktion statt findet  
                                    ); // Ende timeout  
                                    
                                    

                                    Struppi.

                                    --
                                    Javascript ist toll (Perl auch!)
                                2. Sorry Struppi,

                                  bitte nochmal gucken und helfen, ich möchte doch so gerne Deine schicke anonyme
                                  timeout-Funktion verstehen und mein dummes clickTest beerdigen.

                                  Meine Firefox Fehlerkonsole meldet einen Syntax-Fehler bei der fehlenden Klammer

                                  } ,500);

                                  Bitte schau mal

                                  und 2.
                                  setTimeout(function(), 500);

                                  stimmt das? Ich weiß, ich habs schon mal gefragt

                                  function clickTimer(idEbene, xOff, yOff, idSound)

                                  {
                                  klicks++;
                                  setTimeout( function()
                                  {
                                  var Ebene=idEbene;
                                  var Sound=idSound;
                                  var xO=xOff;
                                  var yO=yOff;

                                  if(klicks==1) {
                                  parent.soundfrm.location.href = Sound;        //-> Sound abgespielen
                                  } else {
                                  callDHTML(Ebene, xO, yO);
                                  }
                                  klicks = 0;
                                  } ,500);                                          //hier sieht Firefox Syntax-Probleme
                                  }
                                  var klicks = 0, tout=null;

                                  
                                  >   
                                  > Struppi.  
                                    
                                    
                                  So jetzt noch was, was mich fast irrsinnig werden ließ.  
                                    
                                    
                                  in dem Funktionsaufruf  
                                    
                                  dd.elements[id].moveTo(dd.getScrollX() + xO, dd.getScrollY() + yO);  
                                    
                                  werden die Zahlen als Strings interpretiert, also aus  
                                    
                                  500+250 wird 500250, man kann sich denken wohin der Browser dann scrollt  
                                    
                                  Ich hab einfach probiert und es geht wirklich:  
                                    
                                  dd.elements[id].moveTo( dd.getScrollX()\*1 + xO\*1, dd.getScrollY()\*1 + yO\*1);  
                                    
                                  ist es richtig, dass ich mit der Multiplikation erzwingen kann, dass mit Zahlen gerechnet wird? Ich fass es kaum.  
                                    
                                    
                                  Nochmals Dank und bitte schau nochmal auf den clickTimer!  
                                    
                                  Gruß Reiner
                                  
                                  1. und 2.
                                    setTimeout(function(), 500);

                                    stimmt das? Ich weiß, ich habs schon mal gefragt

                                    nö.

                                    so: setTimeout(function() {....}, 500);

                                    [code lang=javascript]function clickTimer(idEbene, xOff, yOff, idSound)
                                    {
                                    klicks++;
                                    setTimeout( function()
                                    {
                                    var Ebene=idEbene;
                                    var Sound=idSound;
                                    var xO=xOff;
                                    var yO=yOff;

                                    if(klicks==1) {
                                    parent.soundfrm.location.href = Sound;        //-> Sound abgespielen
                                    } else {
                                    callDHTML(Ebene, xO, yO);
                                    }
                                    klicks = 0;
                                    } ,500);                                          //hier sieht Firefox Syntax-Probleme
                                    }

                                    Also ich seh sie nicht.

                                    ist es richtig, dass ich mit der Multiplikation erzwingen kann, dass mit Zahlen gerechnet wird? Ich fass es kaum.

                                    Ja. Es gibt aber auch noch parseInt() parseFloat() oder eine subtraktion mit 0

                                    Struppi.

                                    --
                                    Javascript ist toll (Perl auch!)
                                    1. so: setTimeout(function() {....}, 500);

                                      »»

                                      Struppi.

                                      Hallo Struppi, wäre nur noch die spannende Frage, was {....} bedeutet, ich kann damit nichts anfangen, sorry. Was soll da rein?

                                      Gruß Reiner

                                      1. so: setTimeout(function() {....}, 500);
                                        »»
                                        Struppi.

                                        Hallo Struppi, wäre nur noch die spannende Frage, was {....} bedeutet, ich kann damit nichts anfangen, sorry. Was soll da rein?

                                        Ei, das was passieren soll. Also die deklaration der Variabeln und der aufrud der Funktion, also vermutlich das:

                                        Ebene=idEbene;  
                                        Sound=idSound;  
                                        xO=xOff;  
                                        yO=yOff;  
                                        klicks++;  
                                        clearTimeout(tout);  
                                        if(klicks==1) parent.soundfrm.location.href = Sound;  
                                        else callDHTML(Ebene, xO, yO);  
                                        klicks = 0;  
                                        
                                        

                                        Struppi.

                                        --
                                        Javascript ist toll (Perl auch!)
                                        1. Hallo Struppi, wäre nur noch die spannende Frage, was {....} bedeutet, ich kann damit nichts anfangen, sorry. Was soll da rein?

                                          Ei, das was passieren soll. Also die deklaration der Variabeln und der aufrud der Funktion, also vermutlich das:

                                          Ebene=idEbene;

                                          Sound=idSound;
                                          xO=xOff;
                                          yO=yOff;
                                          klicks++;
                                          clearTimeout(tout);
                                          if(klicks==1) parent.soundfrm.location.href = Sound;
                                          else callDHTML(Ebene, xO, yO);
                                          klicks = 0;

                                          
                                          >   
                                          > Struppi.  
                                            
                                          bitte nochmal langsam für mich Dummy zum kapieren:  
                                            
                                          Jetzt haben wir eine  
                                            
                                          function clickTimer(idEbene, xOff, yOff, idSound)  
                                           {  
                                           klicks++;  
                                           setTimeout(function() , 500);  
                                           {  
                                           var Ebene=idEbene;  
                                           var Sound=idSound;  
                                           var xO=xOff;  
                                           var yO=yOff;  
                                           if(klicks==1) {  
                                           parent.soundfrm.location.href = Sound;  
                                           } else {  
                                           callDHTML(Ebene, xO, yO);  
                                           }  
                                           klicks = 0;  
                                           } ,500);  
                                           }  
                                           var klicks = 0  
                                            
                                          und in das setTimeout kommt alles nochmal oder was?  
                                          Ich kann nicht folgen, tut mir leid.  
                                            
                                            
                                          Grup Reiner
                                          
                                          1. bitte nochmal langsam für mich Dummy zum kapieren:

                                            Jetzt haben wir eine

                                            nein falsch.

                                            setTimeout(function() { HIER KOMMT DER GANZE KRAM REIN }, 500);
                                            du schreibst es hierhin, da bringt es nichts.

                                            Dem function() folgt immer ein Block zwischen geschweiften Klammern.

                                            Struppi.

                                            --
                                            Javascript ist toll (Perl auch!)
    2. Was soll deiner Meinung dann bei der Zuweisung als URL passieren?

      Kann mir jemand weiterhelfen, den übergebenen und gelesenen Parameter Ebene in clickTest() ordentlich zu formulieren?

      Kommt darauf an was diese machen sollen.

      Struppi.

      sorry, jetzt fällt mir auf, was für einen Quatsch ih geschrieben habe:

      mit
      parent.inhalt.location.href wird ja eine URL zugewiesen,

      was aber passieren soll ist:

      die Ebene "Bsp4Golo" soll positioniert und gezeigt werden über den Befehl

      dd.elements.Bsp4Golo.moveTo(dd.getScrollX()+50, dd.getScrollY()+450), dd.elements.Bsp4Golo.show()

      Dieser Befehl soll raus aus meiner

      function clickTest()
        {
         clearTimeout(tout);
         if(klicks==1) {
       alert(Sound+" ScrollY = "+dd.getScrollY());
         parent.soundfrm.location.href = Sound;        //-> Sound abgespielen (URL)
         } else {
       alert(Ebene);
         //hier solls passieren und ich weiß nicht wie  !!!  -> Ebenen-Fenster öffnen
         }
         klicks = 0;
        }

      Reiner