No puedo encontrar la forma de obtener el elemento de destino con jQuery UI ordenable.jQuery ordenable obtener 2 elementos que se intercambian
$("#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);
}
});
Todas las opciones que he probado punto al elemento que se arrastran, pero no el que se intercambia con: ui.item[0]
, event.srcElement
, event.toElement
.
Además, this
apunta al elemento LISTA (OL).
Decir segundo me refiero a continuación:
orden original es:
| 0 | | 2 | |
Arrastramos el elemento 1 y colocarlo en la posición 3. ¿Qué va a terminar con:
| 0 | | 2 | |
El primer elemento es 1 y el segundo es 3 (¡INCORRECTO! Vea a continuación).
ACTUALIZACIÓN: Me he dado cuenta de que me equivoqué. El nuevo pedido en este caso será.
| 0 | 2 | 3 | |
Como resultado, mi pregunta no tiene sentido. Gracias a todos por su ayuda. Voy a marcar el voto y marcar una respuesta.
Entonces la pregunta es ¿cómo obtener el segundo elemento aquí?
LA solución actual (ya que no hay término como intercambio de en sortable) está por debajo. Utiliza una matriz temporal con órdenes.
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);
}
});
Gracias,
Dmitriy.
@Dimitriy, no hay un "segundo elemento", por lo que su pregunta es muy poco clara. Si permite que un usuario recoja y suelte un elemento en cualquier lugar de la lista, simplemente está cambiando los índices para dejar espacio para ello. Solo si lo mueve un lugar hacia arriba o hacia abajo, solo se ven afectados dos elementos. Pero si lo toma desde la parte superior de la lista y lo deja caer después de los siguientes tres elementos, la posición de los tres primeros elementos se verá afectada por el movimiento. No ha ocurrido un "cambio". Por favor describa con más detalle lo que necesita lograr. –
¿Cómo es el método 'swapOnServer'? –
intenté la solución, parece que esta línea: 'var second = currentOrder [prevPagesOrder.indexOf (first)];' debería ser 'var second = prevPagesOrder [currentOrder.indexOf (first)];' –