[JavaScript] Variablenübergabe bei setTimeout()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [JavaScript] Variablenübergabe bei setTimeout()

    Hallo, habe noch eine Frage:

    ich würde gerne folgenden Funktionsaufruf verzögert durchführen:
    PHP-Code:
    switchElement(allDivs[m]) 
    folgender Code funktioniert allerdings nicht:
    PHP-Code:
    setTimeout("switchElement("+allDivs[m]+")"1250); 
    Gibt es einen Trick, wie man ein Objekt in diesem Falle übergeben kann?

  • #2
    PHP-Code:
    setTimeout("switchElement('"+allDivs[m]+"')"1250); 
    Sunshine CMS
    BannerAdManagement
    Borlabs - because we make IT easier
    Formulargenerator [color=red]Neu![/color]
    Herkunftsstatistik [color=red]Neu![/color]

    Kommentar


    • #3
      geht leider nicht...

      Original geschrieben von Benny-one
      setTimeout("switchElement('"+allDivs[m]+"')", 1250);
      Danke für deinen Hinweis - dies geht allerdings nicht....

      PHP-Code:
      var allDivs = new Array();

      function 
      switchElement(element) {
          
      element.border="1";   // Rahmen wird nicht angezeigt
          
      alert(element.className);   // bringt nur "undefined"
      }

      [...]

      for(var 
      m=0m<allDivs.lengthm++) {
          if( (
      allDivs[m].className).search("Menu") != -) {
              
      window.setTimeout("switchElement('"+allDivs[m]+"')"500);
          }
      }

      [...] 
      'alert()' bringt nur "undefined", obwohl durch die if-Bedingung der Klassen-Name die Zeichenkette "Menu" enthalten sollte...

      Habe auch, weil ich es gelesen habe die Variable 'allDivs' global declariert - bringt aber auch nichts...

      Geht das, was ich mir vorstelle überhaupt?

      Kommentar


      • #4
        wie wird allDivs denn mit inhalten gefüllt? und was soll das bewirken?
        PHP-Code:
        className 
        gruß
        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          @Busty: Ich hab das vorher extra ausprobiert, das geht
          Sunshine CMS
          BannerAdManagement
          Borlabs - because we make IT easier
          Formulargenerator [color=red]Neu![/color]
          Herkunftsstatistik [color=red]Neu![/color]

          Kommentar


          • #6
            Original geschrieben von Kropff
            wie wird allDivs denn mit inhalten gefüllt? und was soll das bewirken?
            'allDivs' wird korrekt gefüllt (habe ich getestet) - hier der Code:

            PHP-Code:
            var allDivs document.getElementsByTagName("Div"); 
            Das 'className' habe ich nur zum testen verwendet.
            Es müsste ja den kompletten Klassen-Name enthalten - also mindestens "Menu"

            Wenn ich className weglasse, dann erhalte ich die Meldung "[objectHTMLDivElement]"

            Kommentar


            • #7
              Original geschrieben von Benny-one
              @Busty: Ich hab das vorher extra ausprobiert, das geht
              Das dürfte wohl stark auf den Typ der Variablen ankommen ...

              Bei Strings, OK - aber hier liegen vermutlich eher Objektreferenzen vor, und deren toString-Methode gibt dann nur irgendetwas wie [HTML Object] o.ä. zurück - und das dürfte kaum einen sinnvollen Parameter für die Funktion darstellen.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Original geschrieben von MrBusty
                'allDivs' wird korrekt gefüllt (habe ich getestet) - hier der Code:
                PHP-Code:
                var allDivs document.getElementsByTagName("Div"); 
                Wofür initialisierst du allDivs dann eigentlich vorher als Array?
                Wenn ich className weglasse, dann erhalte ich die Meldung "[objectHTMLDivElement]"
                OK, das bestätigt ja meine Vermutung aus dem vorherigen Post.

                Du kannst nicht einfach so eine Objektreferenz als String übergeben - weil da eben nur dieses [objectHTMLDivElement] bei übergeben wird.


                Closures sind dein Stichwort.
                http://forum.de.selfhtml.org/archiv/...30844/#m846231
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Ja, ich möchte ein Objekt übergeben.

                  Original geschrieben von wahsaga
                  Bei Strings, OK - aber hier liegen vermutlich eher Objektreferenzen vor, und deren toString-Methode gibt dann nur irgendetwas wie [HTML Object] o.ä. zurück - und das dürfte kaum einen sinnvollen Parameter für die Funktion darstellen.
                  Ja, ich möchte ein Objekt übergeben.

                  Ich habe hier im Forum schon gesucht... und auch im Web...
                  Da war aber immer nur von Strings die Rede - daher habe ich hier gepostet.

                  Gibt es für meinen Fall eine Lösung?

                  Intern ist eine Objekt-Variable ja ein nur ein Pointer - gibt es da eine Methode, welche die Adresse zurück gibt?
                  Diese könnte ich dann der Funktion als String übergeben (und diesen dann wiederum in der aufgerufenen Funktion in einen Zahlenwert umwandeln - und so auf das Objekt zugreifen)???

                  Oder ein ganz anderer Lösungsansatz... wäre mir auch recht.
                  (habe bei meiner Recherche aber bisher immer nur 'setTimeout()' für diesen Zweck gefunden...)


                  PS:
                  was mich wundert ist, dass bei folgende Zeile kein Fehler aufgetreten ist:
                  PHP-Code:
                  element.border="1"
                  Hat den die String-Klasse eine Eigenschaft 'border'???
                  Zuletzt geändert von MrBusty; 23.01.2007, 12:03.

                  Kommentar


                  • #10
                    Re:

                    Original geschrieben von wahsaga
                    Wofür initialisierst du allDivs dann eigentlich vorher als Array?
                    Habe das gemacht, weil es ohne auch nicht funktioniert... sollte aber nicht schaden oder?
                    Ich habe teilweise gelesen, dass es nicht bei lokalen Variablen funktioniert - deshalb habe ich diese eben global deklariert.

                    OK, das bestätigt ja meine Vermutung aus dem vorherigen Post.
                    Ja, hätte den Thread lieber Objekt-Übergabe bei setTimeout nennen sollen...

                    Danke, werde mir das morgen (es ist bei mir 3:00 nachts... anschauen.
                    Danke für den Tipp!!!! Hoffe, dass ich damit klar komme.


                    PS:
                    Sorry, für meinen letzten Post - hatte deinen, auf den ich gerade antworte übersehen....

                    Kommentar


                    • #11
                      Re: Re:

                      Original geschrieben von MrBusty
                      Habe das gemacht, weil es ohne auch nicht funktioniert... sollte aber nicht schaden oder?
                      Nö, aber wozu willst du dir ein Schnitzel an die Wand nageln? Das "schadet" vermutlich auch nicht - ist aber sinnfrei.

                      Wenn du var xyz = (ausdruck) schreibst, dann initialisierst du xyz damit doch mit dem vom Ausdruck zurückgegebenen Wert - also wozu vorher noch mal irgendwie anders initialisieren?

                      document.getElementsByTagName liefert dir eine NodeList zurück, und die Referenz darauf legst du dir in allDivs ab - und gut is'. allDivs ist dann sowieso kein Array mehr, weil du es mit der Zuweisung des Rückgabewertes der Methode überschreibst - also wozu sollte es vorher kurzzeitig ein Array sein, um sich besser zu fühlen ...? Quark, kann komplett entfallen.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar

                      Lädt...
                      X