2016-08-27 4 views
0

Ich verwende jQuery Sortable, um Benutzern das Ziehen und Ablegen von Elementen auf der Seite zu ermöglichen. Wenn ein Benutzer ein div zieht, muss ich die aktualisierte Reihenfolge der Liste abrufen und sie an das Back-End übergeben. Bisher habe ich es versucht:Wie erhält man jQuery sortierbare Listenreihenfolge?

aber das macht die Animation wirklich nicht glatt und warnt keine Daten. Wie bekomme ich jedes Mal eine Positionsliste, wenn ein Benutzer ein div zieht und löscht?

JSFIDDLE

Antwort

2

Es gibt eine refreshPositions() Funktion können Sie verwenden, die ein Objekt, das die sortierbare Element zurückgibt. Sie können dann die aktualisierte Liste der untergeordneten Objekte abrufen, indem Sie .children() für dieses Objekt anrufen.

Speichern Sie die Positionen in einer Variablen im stop-Ereignis, das nach dem Sortieren ausgelöst wird.

ich Ihre Funktion gehören die stop Ereignis aktualisiert haben:

$("#sortable").sortable({ 
    stop: function(ev, ui) { 
    //Get the updated positions by calling refreshPositions and then .children on the resulting object. 
    var children = $('#sortable').sortable('refreshPositions').children(); 
    console.log('Positions: '); 
    //Loopp through each item in the children array and print out the text. 
    $.each(children, function() { 
     console.log($(this).text().trim()); 
    }); 
    } 
}); 

Updated Fiddle

+0

Dank @Yass das funktionierte! – kevinabraham

+0

Gut zu hören und gern geschehen. – Yass

0

Verwenden Sie stattdessen die toArray() Methode, hier detailliert beschrieben: http://api.jqueryui.com/sortable/#method-toArray

+0

Dank für Sie @Sterling beantworten. Versucht, dass immer noch das gleiche Problem: https://jsfiddle.net/kevinabraham/7rbv20yd/1/ – kevinabraham

+0

In Ihrer Geige, müssen Sie die toArray-Methode auf der sortierbaren, so '$ (" #sortable ") .sortable (" toArray ")' Auch die Elemente, die sortiert werden, sind die 'li' haben keine IDs. Die unmittelbaren Kinder des sortierbaren brauchen Ids, um 'toArray' zu verwenden – Sterling