Pedda: Funktion nicht definiert ???

Hallo und Guten Morgen zusammen !

Ich habe eine Funktion die das style-Attribut verschiedener Elemente einer Seite auf 'hidden' setzen soll. Die Elemente sollen mit minimalem zeitlichen Versatz "verschwinden" - also fand ich, dass setTimeout eine gute Wahl wäre.... ;-)
Mit "alert" habe ich mir an verschiedenen Stellen die Variablen Ma,stelle und sid anzeigen lassen - sie sind immer so, wie sie auch sein sollten !
Die Elemente mit der ID 'sid' existieren AUCH !!!
In der letzten Zeile, kommt jedoch immer die Fehlermeldung, dass die funktion nicht definiert sei !?
Habe wirklich keine Ahnung mehr, wo da jetzt der Fehler sein könnte !?

Hier mal der code :
*******************************************************

var sid=0;
var stelle=0;
var MA = new Array(11,24,32,45, .... );

function dohidek(MA,stelle) {
  if (stelle<18) {
    sid = MA[stelle];
    document.getElementById(sid).style.visibility='hidden';
    stelle = stelle+1;
    window.setTimeout(function (){ dohidek(MA,stelle) }, 10);
  }
}

********************************************************

Die (wörtliche) Fehlermeldung lautet :
'dohidek is not defined'

Kann mir bitte jemand von euch weiterhelfen ?
Thnx

Pedda

  1. versuch mal dies:

    var sid=0;
    var stelle=0;
    var MA = new Array(11,24,32,45, .... );

    function dohidek() {
      if (stelle<18) {
        sid = MA[stelle];
        document.getElementById(sid).style.visibility="hidden";
        stelle = stelle+1;
        window.setTimeout("dohidek()", 10);
      }
    }

    --
    anstatt " stelle = stelle + 1; "
    kannst du auch " stelle++; " schreiben

    gruss
     andy

    1. Hi andy...

      Vielen Dank, aber die Variablen sind ja nicht das Problem... :(
      DIE werden korrekt gesetzt.
      Der erste "Lauf" der Funktion ist auch fehlerfrei - also Element(sid=11) wird 'hidden' gesetzt.
      Wenn ich die Zeile in
      ***
      window.setTimeout(function (){ alert(MA);alert(stelle);dohidek(MA,stelle) }, 10);
      ***
      abändere, wird auch das Array angegeben und stelle=1.
      Nur hängt er sich dann auf, weil "dohidek" nicht definiert sei !!??

      Ich hab da gestern schon ne halbe Ewigkeit drüber gebrütet :(

      Gruss
      Pedda

      1. abändere, wird auch das Array angegeben und stelle=1.
        Nur hängt er sich dann auf, weil "dohidek" nicht definiert sei !!??

        Arbeitest du mit IE ? Im Firefox funktionnierts einwandfrei. Habe es gerade ausprobiert. (dein Ursprüngliches Script)

        1. nö.... ich arbeite mit FireFox UND IE... und es funzt in beiden nicht !?
          was hast du gemacht ?? erzähl *g*

          Gruss
          Pedda

          1. Hab den Fehler gefunden !!! *freu*

            Die Funktion wurde als onloadevent aufgerufen.... ich hab sie jetzt mal "weiter unten" im code aufgerufen... jetzt funzt es  ! ;-)

            Danke an alle !!

            Gruss
            Pedda

            1. Die Funktion wurde als onloadevent aufgerufen.... ich hab sie jetzt mal "weiter unten" im code aufgerufen... jetzt funzt es  ! ;-)

              Dann wurde sie auch nicht als "onloadevent" aufgerufen.

              Struppi.

              --
              Javascript ist toll (Perl auch!)
              1. Also ich würde das so machen:

                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                <head>
                <title>testseite</title>
                <meta http-equiv="content-type" content="text/html; charset=UTF-8">
                <script type='text/javascript'>
                var i=0;

                function hide() {
                 fields = document.getElementsByTagName("input")
                 if (i < fields.length) {
                  fields[i].style.visibility='hidden';
                  i++;
                  window.setTimeout("hide()", 400);
                 }
                }
                </script>
                </head>
                <body onload='hide()'>

                <input type='text' id='a'>
                <input type='text' id='b'>
                <input type='text' id='c'>
                <input type='text' id='d'>
                <input type='text' id='f'>
                <input type='text' id='g'>
                <input type='text' id='h'>
                <input type='text' id='i'>
                <input type='text' id='k'>

                </body>
                </html>

                1. Also ich würde das so machen:

                  Warum du das mir antwortest weiß ich nicht, aber na gut

                  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

                  Wenn schon einen DOCTYPE dann wenigstens einen, der den Browser nicht in den Quirksmode schickt.

                  var i=0;

                  function hide() {
                  fields = document.getElementsByTagName("input")
                  if (i < fields.length) {
                    fields[i].style.visibility='hidden';
                    i++;
                    window.setTimeout("hide()", 400);
                  }
                  }

                  Globale Variabeln, vor allem Schleifenzähler, sind immer eine schlechte Idee und ein schlechter Programmierstil, der dich irgendwann Stunden an Fehlersuche kosten wird. Zumal in deinem Beispiel das i problemlos als Parameter übergeben werden kann.

                  Also ich würd's so machen (wobei das was anderes ist als der OP wollte)

                  function hide(nr)  
                  {  
                  if(!nr) nr = 0;  
                  var fields = document.getElementsByTagName("input")  
                  if(nr < fields.length)  
                  {  
                     fields[nr++].style.visibility='hidden';  
                     window.setTimeout(function() {hide(nr);}, 400);  
                  }  
                  }  
                  
                  

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
  2. Ich habe eine Funktion die das style-Attribut verschiedener Elemente einer Seite auf 'hidden' setzen soll.

    Sie sollte so, wie sie da steht, funktionieren.

    Die (wörtliche) Fehlermeldung lautet :
    'dohidek is not defined'

    Höchstvermutlich rufst du die Funktion auf, wenn es sie noch gar nicht gibt oder weil eine Ressource nicht geladen werden konnte. Näheres kann man aber nur sagen, wenn man eine Beispielseite gesehen hat.

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    1. Hi Siechfred...

      der erste "Lauf" der Funktion ist einwandfrei - das erste Element "verschwindet" also...
      In der Timeout-Zeile sagt er dann aber, dohidek sei nicht definiert...

      Ich fang gleich an zu heulen hier ;-)

      Gruss
      Pedda

      1. der erste "Lauf" der Funktion ist einwandfrei - das erste Element "verschwindet" also...
        In der Timeout-Zeile sagt er dann aber, dohidek sei nicht definiert...

        Wie gesagt, ohne komplette Testseite kann ich keinen Fehler finden.

        Siechfred

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)
  3. Moin

    var sid=0;
    var stelle=0;
    var MA = new Array(11,24,32,45, .... );

    function dohidek(MA,stelle) {
      if (stelle<18) {
        sid = MA[stelle];
        document.getElementById(sid).style.visibility='hidden';
        stelle = stelle+1;
        window.setTimeout(function (){ dohidek(MA,stelle) }, 10);
      }
    }

    demnach haben die Elemente eine Zahl als ID?
    Das ist nicht zulässig. Lass die IDs mal mit einem Buchstaben anfangen.

    Übrigens: MA und stelle hast du als globale Variablen definiert, dann brauchst du die nicht mehr als Parameter an die Funktion übergeben.

    Gruß
    rfb

    --
    Man kann einen Menschen nichts lehren, man kann ihm nur helfen, es selbst zu entdecken.
    (Galileo Galilei)
    1. Moin rfb,

      wenn ich die Parameter beim Funktionsaufruf weglasse und die IDs mit einem Buchstaben anfa´ngen lasse, geschieht das selbe...
      Die Funktion läuft einmal durch (das erste Element verschwindet) und in der setTimeout-Zeile bongt das Ding wieder mit 'dohidek is not defined'

      :-(

      Gruss
      Pedda

  4. Die (wörtliche) Fehlermeldung lautet :
    'dohidek is not defined'

    In welchen Browser?
    Ist das Fehlermeldung im Firefox?

    Was erhälst du, wenn du dir das mal anzeigen läßt:

    window.setTimeout( function (){ alert( dohidek); }, 10);

    Struppi.

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

      ja die Fehlermeldung kommt aus dem FireFox, aber selbst im IE bricht das script ab :(
      Was ich mit deinem "alert" erhalte ist gar nichts... keine alert-box, aber wieder die Fehlermeldung 'dohidek is not defined'

      Pedda

      1. ja die Fehlermeldung kommt aus dem FireFox, aber selbst im IE bricht das script ab :(

        Dann wird dein Code gar nicht erst eingebunden.

        Was ich mit deinem "alert" erhalte ist gar nichts... keine alert-box, aber wieder die Fehlermeldung 'dohidek is not defined'

        Was auch das erklärt.

        Struppi.

        --
        Javascript ist toll (Perl auch!)