TOM: Befehl funtzt innerhalb SetTimeout nicht mehr !??

Hallo Forum

also gleich zur Sache ich hab folgende JavaScript-Funktion:

function operator(Name1, Name2){
[...]
          if(wert != ''){
              if(this.byid) setTimeout('document.getElementById(Name1).selectedIndex = 0',750);
              else if(this.docall) setTimeout('document.all[Name1].selectedIndex = 0',750);
              alert(wert + ' und ' + Name2 + ' AND ' + Name1);
          }
      }

So. Naja was passiert? gar nix. Das, was in SetTimeout steht wird nicht gemacht. wenn ich den Befehl ausserhalb von SetTimeout anwende gehts - komisch oder is da Müll drin?

Thx 4 help TOM

P.S.: Das Dokument ist HTML4.01 konform

  1. Ach ja sorry, hab ich vergessen die variablen this.docall und this.timeout sind boolean und enthalten ob document.getelementByID und document.all möglich sind

    MfG TOM

    1. Hi TOM,

      bei setTImeout kannst du nur JavaScript Variablen verwenden die Global sind. Lokale Variablen wie z.B. bei dir Name1 funktionieren nicht. Du musst diese dann vor dem aufruf, global machen, dann dürfte es gehen.

      Gruß

      ueps

      1. Danke!

        Das wusst ich gar nicht...

        aber ich glaub dann pack ich den Teil in ne Funktion - is besser

        thx nochmal

        MfG TOM

        1. Moin!

          Das wusst ich gar nicht...

          aber ich glaub dann pack ich den Teil in ne Funktion - is besser

          Nö, wieso denn?

          Du kannst dem setTimeout doch den _Wert_ der Variablen mitgeben:

          An einem Beispiel:
          Statt diesem:
          setTimeout('document.getElementById(Name1).selectedIndex = 0',750);
          nimmst du dieses:
          setTimeout('document.getElementById("'+Name1+'").selectedIndex = 0',750);

          Der Befehl des setTimeout wird dann gewandelt von
          document.getElementById(Name1).selectedIndex = 0
          in
          document.getElementById("WertderVariable").selectedIndex = 0

          Und das ist IMO genau das, was du willst.

          - Sven Rautenberg

          1. Hi

            danke es geht, aber kannst du mir noch bisschen genauer erklären warum?

            ich versteh das nämlich nicht. Warum sind die Variablen dann global??

            MfG TOM

            1. Hi,

              ich versteh das nämlich nicht. Warum sind die Variablen dann global??

              Wird setTimeout öfters aufgerufen, dann wären die lokalen Variablen ab dem zweiten aufruf ja nicht mehr gestzt und es würde zu Fehlern kommen. Wenn du nur den Wert der in der Vraible steht mit übergibst, oder eben eine globale Variable nimmst, besteht dieses Problem nimmer.

              Gruß

              ueps

              1. Hi

                Axo - die Variable is dann deshalb auch nicht global - alles klar

                Also beide Wege funzen - habs schon probiert

                danke an euch beide

                MfG TOM