Non riesco a trovare come ottenere l'elemento di destinazione con l'interfaccia utente jQuery ordinabile.jQuery ordinabile ottenere 2 elementi da scambiare
$("#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);
}
});
Tutte le opzioni che ho punto all'elemento provato trascinati, ma non quello che viene scambiato con: ui.item[0]
, event.srcElement
, event.toElement
.
Inoltre, this
punti all'elemento LISTA (OL).
Dire secondo voglio dire seguendo:
ordine originale è:
| 0 | | 2 | |
trasciniamo elemento 1 e rilasciarlo in posizione 3. che finirà con:
| 0 | | 2 | |
Quindi il primo elemento è 1 e il secondo è 3 (ERRATO! Vedere di seguito).
AGGIORNAMENTO: Mi sono reso conto di aver sbagliato. Il nuovo ordine in questo caso sarà.
| 0 | 2 | 3 | |
Di conseguenza la mia domanda non ha davvero senso. Grazie a tutti per l'aiuto. Contrassegnerò il voto e segnerò una risposta.
Quindi la domanda è come ottenere il secondo elemento qui?
La soluzione CORRENTE (in quanto non v'è alcun termine come scambiando in ordinabile) è al di sotto. Usa array temporaneo con ordini.
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);
}
});
Grazie,
Dmitriy.
@Dimitriy, non esiste un "secondo elemento", quindi la tua domanda non è chiara. Se si consente a un utente di prelevare e rilasciare un oggetto in qualsiasi punto dell'elenco, è sufficiente spostare gli indici per fare spazio. Solo se si sposta di un posto verso l'alto o verso il basso, sono interessate solo due voci. Ma se lo prende dalla cima della lista, e lo fa cadere dopo i prossimi tre oggetti, i primi tre elementi della posizione sono tutti influenzati dalla mossa. Nessun "interruttore" si è verificato. Descrivi in modo più dettagliato ciò che devi realizzare. –
Com'è il metodo 'swapOnServer'? –
ha provato la soluzione, sembra questa riga: 'var secondo = currentOrder [prevPagesOrder.indexOf (first)];' dovrebbe essere 'var second = prevPagesOrder [currentOrder.indexOf (first)];' –