Nie mogę znaleźć sposobu na uzyskanie elementu docelowego z sortowalnym jQuery UI.jQuery do sortowania otrzymuje 2 wymieniane elementy
$("#pages").sortable({
opacity: 0.6,
update: function(event, ui) {
var first = ui.item; // First element to swap
var second = ???? // Second element to swap
swapOnServer(first, second);
}
});
Wszystkie opcje próbowałem punkt do elementu przeciągany, ale nie ten jest zamienione z: ui.item[0]
, event.srcElement
, event.toElement
.
Dodatkowo, this
wskazuje na element LISTA (OL).
Mówiąc sekund Znaczy następuje:
oryginalnej kolejności jest:
| 0 | | 2 | |
Mamy przeciągania elementu 1 i upuść go w pozycji 3. Które skończy się z:
| 0 | | 2 | |
Pierwszy element to 1, a drugi to 3 (NIEPRAWIDŁOWO! Patrz poniżej).
AKTUALIZACJA: zdałem sobie sprawę, że źle to zrobiłem. Nowy porządek w tym przypadku będzie.
| 0 | 2 | 3 | |
W rezultacie moje pytanie nie ma większego sensu. Dziękuję wszystkim za pomoc. Zaznaczę głos i zaznaczę odpowiedź.
Pytanie więc, jak uzyskać tutaj drugi element?
OBECNY Rozwiązanie (co nie jest określenie, jak wymiany w sortowalny) przedstawiono poniżej. Używa tymczasowej tablicy z zamówieniami.
var prevPagesOrder = [];
$("#pages").sortable({
start: function(event, ui) {
prevPagesOrder = $(this).sortable('toArray');
},
update: function(event, ui) {
var currentOrder = $(this).sortable('toArray');
var first = ui.item[0].id;
var second = currentOrder[prevPagesOrder.indexOf(first)];
swapOnServer(first, second);
}
});
Dzięki
Dmitriy.
@Dimitriy, nie ma "drugiego przedmiotu", więc sprawia, że pytanie jest bardzo niejasne. Jeśli pozwalasz użytkownikowi odebrać i upuścić element w dowolnym miejscu na liście, to wystarczy przesunąć indeksy, aby zrobić miejsce dla niego. Tylko wtedy, gdy porusza się o jedno miejsce w górę lub w dół, dotyczy to tylko dwóch przedmiotów. Jeśli jednak zabierze go ze szczytu listy i upuści po następnych trzech pozycjach, wszystkie ruchy będą miały wpływ na pozycję pierwszych trzech pozycji. Nie wystąpił "przełącznik". Proszę opisać bardziej szczegółowo to, co chcesz osiągnąć. –
Jak działa metoda 'swapOnServer'? –
wypróbował rozwiązanie, wydaje się, że ta linia: 'var second = currentOrder [prevPagesOrder.indexOf (first)];' powinno być 'var second = prevPagesOrder [currentOrder.indexOf (first)]; –