Scriptaculous: sortable.create | Funktioniert nicht nach JS-Aktualisierung der Liste

27apricot

Erfahrenes Mitglied
Hallo allerseits,

für den dynamischen Bereich einer Internetseite habe ich einen Redaktionsbereich programmiert. In einem Formular zum Hinzufügen/Bearbeiten eines Datenbank-Eintrags werden in einer Spalte alle dem Eintrag zugehörigen Bilder als Liste angezeigt. Diese Liste habe ich mit »sortable.create« aus dem scriptaculous-Framework sortierbar gemacht, was auch ganz einwandfrei funktioniert.

Will man jetzt ein neues Bild hinzufügen, öffnet sich dafür ein Popup-Fenster mit einem Upload-Formular. Nach dem erfolgreichen Upload wird die Bilder-Liste im Hauptfenster neu geladen (per Ajax-Request; die angefrage PHP-Funktion gibt den HTML-Text für die Listenpunkte (li) zurück, die dann von der Ajax-Funktion per innerHTML in die Liste geschrieben werden. Auch das funktioniert.

Will man jetzt aber im Hauptfenster die Bilder-Liste neu sortieren, sind die Listenpunkte nicht mehr anfassbar, also »draggable«. Erst nach dem Neuladen der Seite vom Server funktioniert alles wieder. Ich habe auch schon versucht, die ganze Liste einschließlich des JS-Codes mit »sortable.create« von PHP neu schreiben zu lassen. Aber es hat auch dann nicht funktioniert.

=====================
Nachtrag
Keine Ahnung, warum ich das bisher nicht ausprobiert habe: ich habe jetzt das »sortable.create« in der JS-Funktion aufgerufen, die die Liste anhand der Antwort des Ajax-Requests neu lädt. Jetzt sind die einzelnen Listenpunkte zwar immerhin »draggable«, aber nur bedingt »droppable«: man muss zwei mal die Maus klicken, um das Element loszulassen und die Markierung als »angefasstes Element« verschwindet nicht wieder. Und offensichtlich bekommt es keine Antwort, die bei OnUpdate verarbeitet werden sollte, denn die PHP-Funktion zum Eintragen der Änderung in die DB wird nicht aufgerufen.
=====================

Ich hoffe, das ist halbwegs verständlich.

Vielen Dank im Voraus und schöne Grüße,
27apricot.
 
Zuletzt bearbeitet:
Moin,

du könntest mal folgenden Ablauf probieren:

1.Sortierbarkeit entfernen per Sortable.destroy()
2.Neuen Listenpunkt einfügen
3. wieder sortierbar machen
 
Hallo Sven,

vielen Dank für die Antwort. Hat ein bisschen gedauert, bis ich das probieren konnte. Ich habe das sortable.destroy erst in meine JS-Funktion eingebaut, die ja alle »li«-Tags neu schreibt. Da gab es keine Veränderung zu vorher: die Elemente sind »draggable«, aber es gibt keine Server-Antwort.

Dann habe ich alles umgebaut, um nur das neue Listen-Element anzuhängen, aber auch da änderte sich nix. Zumal es bei dieser Art der Funktionalität noch einige andere Probleme gibt (nach dem Löschen eines Bildes – ebenfalls per Ajax – gibt es einen Fehler mit dem Ausblenden des DIVs). Deswegen würde ich das auch gern dabei belassen, dass alle Listen-Elemente neu geladen werden.

Schöne Grüße,
27apricot.
 

Neue Beiträge

Zurück