2010-06-05 28 views

Respuesta

270

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.

+53

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. –

+0

¿Hay alguna manera de encontrar los portlets ordenables div-id en #sortable div? – Frank

+2

i_a hizo lo que @David Boike escribió: http://stackoverflow.com/a/12962399/114029 –

115

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()); 
    } 
}); 
+4

¡Me salvaste el día! Señor pregunta, ¿cómo puedo guardar la nueva posición usando ajax? – mrrsb

+3

¿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

+0

No entiendo por qué una funcionalidad tan común no es parte de ordenable ... – burzum

10

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:

http://jsfiddle.net/7a1836ce/

<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> 
Cuestiones relacionadas