dartrax: Danke, Lösung gefunden!

Beitrag lesen

Hier würde ArrString durch Str1,Str2,Str3,Str4 ersetzt, was dann kein Array mehr wäre, sondern vier wahrscheinlich nicht definierte Variablen. Ist es denn nötig, das Array schon im onload-Handler zu definieren? Könnte es nicht genausogut erst in test() definiert werden? Oder du packst es in eine globale Variable, sodass es nicht übergeben werden muss.

Das geht leider nicht, denn die Funktion wird im onload-Handler zwei mal mit verschiedenen Parametern aufgerufen. Deshalb müssen die Parameter bereits im Handler festgelegt werden, denn danach benutzen beide Funktionsdurchläufe den selben Code und sind deshalb nicht mehr ohne Parameter unterscheidbar.

Wenn das nicht geht, musst du setTimeout() einen String übergeben, der genauso aussieht wie im onload-Handler:

<body onload="checkOffsetW(new Array('Str1', 'Str2', 'Str3', 'Str4'))">

etwa so: setTimeout("checkOffsetW(new Array('" + ArrString[0] + "','" + ArrString[1] + ... usw.

Sehr kompliziert, wenn es kein statisches Array ist und der String deshalb mit einer Schleife gebildet werden muss.

Eventuell geht auch: setTimeout(document.body.onload, 200);

Wie oben beschrieben hat der onLoad-Handler mehrere Funktionsaufrufe, die sollen dann nicht auch alle mehrfach ausgeführt werden. Das wäre aber wohl der Fall, wenn man den im onLoad-Handler gespeicherten Wert aufruft.

Weil setTimeout nicht für Arrays ausgelegt zu sein scheint und auch meine Versuche, innerhalb von checkOffsetW die Verzögerung über eine while-Schleife, in der mit setTimeout eine dummy-Funktion aufgerufen wird, zu realisieren, eher in Endlosschleifen denn zum Erfolg geführt haben, verzichte ich auf das Array und packe die Zellennamen durch Komma getrennt in einen einfachen String. Der wird dann erst in der eigentlichen (hier test() genannten) Funktion mit .split() in ein Array umgewandelt. setTimeout braucht sich dann nur noch um den einen String kümmern.

Mit deinem timeOut-Tipp in einer rekursiven Funktion funktioniert es jetzt also, und zwar ohne überflüssige Zeit verstreichen zu lassen oder das Risiko einzugehen, dass auf langsamen Systemen doch noch die eine oder andere Fehlformatierung auftritt.

Wenn noch ein Problem mit dieser Lösung auftritt (oder noch die ein oder andere Antwort fällig ist), melde ich mich wieder, bis dahin: Tausend Dank, Stefan W!

dartrax