¿Cómo realizo un seguimiento de qué posición es un elemento cuando cambia su posición en una lista ordenable?jQuery UI Posición ordenable
Respuesta
Usted puede utilizar el objeto ui
proporcionado a los eventos, específicamente desea que el stop
event, la ui.item
property y .index()
, así:
$("#sortable").sortable({
stop: function(event, ui) {
alert("New position: " + ui.item.index());
}
});
You can see a working demo here, recordar el valor .index()
está basado en cero, por lo que puede desea +1 para fines de visualización.
No estaba seguro de dónde iba a guardar la posición de inicio, por lo que quiero profundizar en el comentario de David Boikes. Me di cuenta que podía almacenar esa variable en el propio objeto ui.item y recuperarlo en la función de parada de modo que:
$("#sortable").sortable({
start: function(event, ui) {
ui.item.startPos = ui.item.index();
},
stop: function(event, ui) {
console.log("Start position: " + ui.item.startPos);
console.log("New position: " + ui.item.index());
}
});
¡Me salvaste el día! Señor pregunta, ¿cómo puedo guardar la nueva posición usando ajax? – mrrsb
¿Por qué no tienen un ejemplo simple como este en las páginas de man ordenables? Realmente no me di cuenta de que los elementos de 'start' eran capaces de estar en el alcance 'stop' hasta que vi esto. – Sablefoste
No entiendo por qué una funcionalidad tan común no es parte de ordenable ... – burzum
Uso actualización lugar de parada
http://api.jqueryui.com/sortable/
actualización (event, ui)
Tipo: sortupdate
Este evento se desencadena cuando el usuario ha dejado de ordenar y la posición DOM ha cambiado.
.
parada (evento, ui)
Tipo: sortstop
Este evento se lanza al ordenar se ha detenido. Tipo de evento: Evento
pieza de código:
<script type="text/javascript">
var sortable = new Object();
sortable.s1 = new Array(1, 2, 3, 4, 5);
sortable.s2 = new Array(1, 2, 3, 4, 5);
sortable.s3 = new Array(1, 2, 3, 4, 5);
sortable.s4 = new Array(1, 2, 3, 4, 5);
sortable.s5 = new Array(1, 2, 3, 4, 5);
sortingExample();
function sortingExample()
{
// Init vars
var tDiv = $('<div></div>');
var tSel = '';
// ul
for (var tName in sortable)
{
// Creating ul list
tDiv.append(createUl(sortable[tName], tName));
// Add selector id
tSel += '#' + tName + ',';
}
$('body').append('<div id="divArrayInfo"></div>');
$('body').append(tDiv);
// ul sortable params
$(tSel).sortable({connectWith:tSel,
start: function(event, ui)
{
ui.item.startPos = ui.item.index();
},
update: function(event, ui)
{
var a = ui.item.startPos;
var b = ui.item.index();
var id = this.id;
// If element moved to another Ul then 'update' will be called twice
// 1st from sender list
// 2nd from receiver list
// Skip call from sender. Just check is element removed or not
if($('#' + id + ' li').length < sortable[id].length)
{
return;
}
if(ui.sender === null)
{
sortArray(a, b, this.id, this.id);
}
else
{
sortArray(a, b, $(ui.sender).attr('id'), this.id);
}
printArrayInfo();
}
}).disableSelection();;
// Add styles
$('<style>')
.attr('type', 'text/css')
.html(' body {background:black; color:white; padding:50px;} .sortableClass { clear:both; display: block; overflow: hidden; list-style-type: none; } .sortableClass li { border: 1px solid grey; float:left; clear:none; padding:20px; }')
.appendTo('head');
printArrayInfo();
}
function printArrayInfo()
{
var tStr = '';
for (tName in sortable)
{
tStr += tName + ': ';
for(var i=0; i < sortable[tName].length; i++)
{
// console.log(sortable[tName][i]);
tStr += sortable[tName][i] + ', ';
}
tStr += '<br>';
}
$('#divArrayInfo').html(tStr);
}
function createUl(tArray, tId)
{
var tUl = $('<ul>', {id:tId, class:'sortableClass'})
for(var i=0; i < tArray.length; i++)
{
// Create Li element
var tLi = $('<li>' + tArray[i] + '</li>');
tUl.append(tLi);
}
return tUl;
}
function sortArray(a, b, idA, idB)
{
var c;
c = sortable[idA].splice(a, 1);
sortable[idB].splice(b, 0, c);
}
</script>
- 1. jQuery UI ordenable y seleccionable
- 2. JQuery UI Autocompletar Posición
- 3. Jquery ui ordenable en serie no funciona
- 4. Lista ordenable + anidada con jQuery UI 1.8.2
- 5. jQuery UI manejable de mesa ordenable
- 6. jQuery UI elemento arrastrable caído en ordenable
- 7. JQuery-UI ordenable en el formulario enviar
- 8. jQuery UI ordenable con filas fijas
- 9. Obteniendo la posición ordenada ¿Lista ordenable JQuery?
- 10. Posición de diálogo jQuery UI
- 11. JQuery UI ordenable - Agregar marcadores de posición a las listas para simular espacios vacíos
- 12. JQuery UI ordenable: restaurar la posición en función de alguna condición
- 13. jquery UI ordenable: ¿cómo puedo cambiar la apariencia del objeto "marcador de posición"?
- 14. jquery ui marcador de posición ordenable no puede cambiar el color de fondo
- 15. Jquery ordenable ('serialize')
- 16. jQuery UI Se puede configurar manualmente una posición
- 17. Jquery UI ordenable, el botón no funciona como manejar
- 18. jQuery UI: ordenable ('toArray') devuelve un array vacío
- 19. jQuery UI Posición del botón de diálogo
- 20. animando la posición de jQuery Ui()
- 21. jQuery comportamiento ordenable inesperado
- 22. instancias TinyMCE en jquery ordenable
- 23. jquery ordenable excepto éste
- 24. jQuery + ordenable + en vivo
- 25. jQuery ordenable y droppable
- 26. jquery UI ordenable: ¿cómo dejar el original visible hasta la caída?
- 27. jquery complemento ordenable con "efecto deslizante"?
- 28. jQuery ordenable no es una función
- 29. jQuery ordenable - Guárdelo en la lista original
- 30. Jquery ordenable, eliminar elemento actual arrastrando
Como nota adicional, si se desea realizar un seguimiento en el que el elemento movido vino de (mover de la posición 0 a la posición 2) luego necesita acceder al valor ui.item.index() en el evento de inicio y almacenar ese valor. –
¿Hay alguna manera de encontrar los portlets ordenables div-id en #sortable div? – Frank
i_a hizo lo que @David Boike escribió: http://stackoverflow.com/a/12962399/114029 –