d3nn1s: Too much recursion / stack overflow...

Hallo zusammen,

ich habe eine Webseite in der ich einige ausgewählte Bereiche (Divs) verschiebbar machen möchte.
Hier dazu mein Code

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<script src="js/prototype.js" type="text/javascript"></script>  
<script src="js/scriptaculous.js" type="text/javascript"></script>  
<script src="js/common.js" type="text/javascript"></script>  
<script src="js/effects.js" type="text/javascript"></script>  
<script src="js/builder.js" type="text/javascript"></script>  
<script src="js/dragdrop.js" type="text/javascript"></script>  
<script src="js/controls.js" type="text/javascript"></script>  
<script src="js/slider.js" type="text/javascript"></script>  
<script type="text/javascript">  
<!--  
function init()  
{  
 new Draggable(document.getElementById('p0'), {revert: true});  
 Element.addClassName(document.getElementById('p0'), 'cursorPointer');  
}  
  
Event.observe(window, 'load', init);  
  
//-->  
</script>  
</head>  
<body>  
...  
<div id="p0" class="cursorPointer">Verschiebbar</div>  
...  
</body>  
</html>  

Leider bekomme ich immer die Meldung
vom IE: stack overflow at line: 1922
vom firefox:
too much recursion
[Break on this error] return __method.apply(null, [this].concat($A(arguments)));
prototype.js (Linie 247)
too much recursion
[Break on this error] if (property == 'opacity') element.setOpacity(styles[property]);
prototype.js (Linie 1921)
too much recursion
[Break on this error] return $(element).setStyle({opacity:value});
effects.js (Linie 57)
too much recursion
[Break on this error] var msg = "Error in hook: "+ exc +" fn=\n"+fn+"\n stack=\n";

Ich hab null Ahnung, wo ich da ansetzen soll. Hat jemand eine Idee?

Gruss
d3nn1s

  1. Achso, natürlich bekomm ich die Meldung erst, wenn ich auf das Objekt klicke und es verschieben möchte.
    Beim IE kommt die Meldung ein zweites Mal, wenn ich das Objekt wieder "loslasse" (ein weitere Klick).

    1. Hi,

      also das Problem hier sind, wie die FF Meldung vermuten lässt, rekursive Aufrufe. Diesen hauen den internen JavaScript-Speicher (Stack) recht schnell voll und dann geht nix mehr.
      Versuche die Rekursionen durch eine flachere Struktur zu ersetzen, zB. die wiederholten Aufrufe in einer Schleife absetzen oder so.

      Gruß

      1. Hi,

        also das Problem hier sind, wie die FF Meldung vermuten lässt, rekursive Aufrufe. Diesen hauen den internen JavaScript-Speicher (Stack) recht schnell voll und dann geht nix mehr.
        Versuche die Rekursionen durch eine flachere Struktur zu ersetzen, zB. die wiederholten Aufrufe in einer Schleife absetzen oder so.

        Gruß

        vielen dank für eure tipps.
        ich habe das problem gerade lösen können, indem ich mir die aktuellen versionen von script.aculo.us heruntergeladen. nun funktioniert es.

  2. Hallo,

    deine Aufzählung von Dateinamen ist nicht hilfreich:

    <script src="js/prototype.js" type="text/javascript"></script>
    <script src="js/scriptaculous.js" type="text/javascript"></script>
    <script src="js/common.js" type="text/javascript"></script>
    <script src="js/effects.js" type="text/javascript"></script>
    <script src="js/builder.js" type="text/javascript"></script>
    <script src="js/dragdrop.js" type="text/javascript"></script>
    <script src="js/controls.js" type="text/javascript"></script>
    <script src="js/slider.js" type="text/javascript"></script>

    Gehe mal die Fehlermeldungen einzeln durch, zum Beispiel

    prototype.js (Linie 247)

    Was passiert da? Ruft eine Funktion sich selbst auf? Aus welchem Anlass?

    Ich hatte schon mal den Fehler, dass ein Event "dauerfeuert", ich weiss aber nicht mehr, welches.

    Wenn du keine Ahnung hast, suche dir ein funktionierendes Beispiel für das Verschieben von Objekten.

    Gruß, Kalle