2012-05-16 5 views
11

Ich habe einen Draggable/Sortier-Satz von Listen, denen ich Elemente dynamisch hinzufüge, aber das Problem ist, dass ein einmal hinzugefügtes Element nicht verschoben werden kann zu den neuen Listen. Sie können die Funktionalität hier sehen: http://jsfiddle.net/Y4T32/2/jQuery UI Draggable/Sortierbar - Dynamisch hinzugefügte Elemente nicht ziehbar

Ziehen Sie ein Element aus der Liste auf eine der Ziellisten, und Sie werden sehen, dass ich meine. Fügen Sie nun ein "Callout" hinzu und versuchen Sie, das neue Objekt in eine der Zielspalten zu ziehen.

Ich habe hier eine andere Antwort gefunden, die funktioniert, wie ich will, aber die Ergebnisse, die sie bekommen haben, nicht reproduzieren konnte (und natürlich kann ich die Antwort jetzt nicht finden). Irgendein Einblick in das, was ich hier falsch mache?

+0

fand ich [diese Antwort] (http://stackoverflow.com/questions/2583883/how-to-auto-apply-drag und-drop-effect-to-dyally-added-element) und hat eine kleine Änderung vorgenommen. Dies scheint mir jedoch nicht der beste Weg zu sein. Ich habe meine Geige aktualisiert. http://jsfiddle.net/Y4T32/7/ –

Antwort

18

AKTUALISIERT ANTWORT

Sie haben für jedes Element .draggable() aufzurufen, die hinzugefügt wird. Der jQuery-Selektor, den Sie zum Zeitpunkt der Initialisierung verwenden, gilt nur für Elemente, die derzeit vorhanden sind, und nicht für diejenigen, die Sie erstellen.

Hier einige JS, die funktionieren sollte:

var draggable_opts = { 
      connectToSortable: ".sph-callout-portlet", 
      helper: "clone", 
      opacity: 0.75, 
      revert: 'invalid', 
      stop: function(event, ui) { 
       //alert(ui) 
      } 
     }; 

$(function() { 
    $(".sph-callout-portlet").sortable({ 
     opacity: 0.75, 
     placeholder: "ui-state-highlight", 
    }).disableSelection(); 

    $("#sph-callout-portlet-avail li").draggable(draggable_opts); 

    $(document).on("click",'#addNewCo',function(e){ 
     e.preventDefault(); 
     var newCo = $('<li>New Callout</li>').draggable(draggable_opts); 
     $('#sph-callout-portlet-avail').append(newCo); 
    }); 
});​ 

http://jsfiddle.net/SGevw/

+1

Es ist eine gute Idee, Ihren Code hier für den Fall, dass jsFiddle immer unerreichbar ist. Auch eine Erklärung dessen, was Sie getan haben, ist ein Plus. – j08691

+1

@ j08691, fertig. danke für die heads-up! – ubik

+0

@PedroFerreira, das ist sehr nahe an dem, was ich will, außer, ich möchte nicht Benutzer in der Lage sein, sie zwischen den Spalten oder zurück in die verfügbare Spalte zu ziehen. Deshalb habe ich ihnen verschiedene Klassennamen gegeben. –