1UnitedPower: drag&drop element wird nicht gespeichert

Beitrag lesen

Wenn ich mit "[]" initialisieren will, dann einfach "this.elements[];" ?

this.elements = [];

Hier mal die Initialisierung (das ist das "Ende" der js-Datei):

function GUIInit()

{
body = document.getElementsByTagName("body")[0];
if(body)
{
window.GUIenv = new GUIEnvironment(body);
document.onmousemove = GUIenv.doDrag;
document.onmouseup = GUIenv.stopDrag;
}
else
window.setTimeout("GUIInit()", 100);
}

GUIInit();


>   
> Dazu fällt mir noch ein, wenn ich an setTimeout() direkt GUIInit() übergebe - also nicht als string - meckert Firefox immer rum a la "too much recursion" [dazu werd ich mich zu einem anderen Zeitpunkt noch mal genau belesen]  
  
~~~javascript
  
window.setTimeout(GUIInit(), 100); //Führt zu einem Fehler, falls GuiInit nicht zufällig eine Funktion zurückgibt  
  
window.setTimeout(GUIInit, 100); // Müsste funktionieren  
  
// Beides ist allerdings hässlich, besser du machst folgendes  
  
document.addEventListener("DOMContentLoaded",GUIInit); // dann kannst du sicher sein, dass dein DOM-Baum fertig geladen hat  

Das könnte widerum mit deinem Problem zu tun haben. Durch setTimeout("GUIInit()",100) wird GUIInit in einem anderen Scope, wenn nicht sogar in einem anderen Scope aufgerufen. setTimeout arbeitet hier ähnlich wie "eval()".

Als nächstes hierzu:

window.GUIenv = new GUIEnvironment(body);

Warum machst du GUIenv zu einer Eigenschaft von window? Ich sehe keinen Grund dafür und würde GUIenv besser zu deinem Programm-Scope hinzufügen.

Apropros Scope du solltest dein Programm in einen closure packen um keine unnötigen globalen Variable zu erzeugen. In etwa so:

  
(function(){  
  // dein Programmcode  
}());  

Falls das alles immernoch nicht hilft, ich bin noch ne Weile wach.

Grüße
-1UP