jQuery UI Posisi Dapat Diurut


Jawaban:


296

Anda dapat menggunakan uiobjek yang disediakan untuk acara, khususnya yang Anda inginkan stopacara , ui.itemproperti dan .index(), seperti ini:

$("#sortable").sortable({
    stop: function(event, ui) {
        alert("New position: " + ui.item.index());
    }
});

Anda dapat melihat demo yang berfungsi di sini , ingat .index()nilainya berbasis nol, jadi Anda mungkin ingin memberi +1 untuk tujuan tampilan.


60
Sebagai catatan tambahan, jika Anda ingin melacak dari mana item yang dipindahkan berasal (pindah dari posisi 0 ke posisi 2) maka Anda perlu mengakses nilai ui.item.index () di acara mulai dan menyimpan nilai itu.
David Boike

Apakah ada cara untuk menemukan portlets div-id yang dapat diurutkan dalam #sortable div?
Frank

Juga, jika Anda perlu melacak posisi selama drag dengan sort, Anda dapat menggunakan ui.placeholder.index. Indeks mulai di posisi 1.
Loïc Pennamen

127

Saya tidak yakin di mana saya akan menyimpan posisi awal, jadi saya ingin menguraikan komentar David Boikes. Saya menemukan bahwa saya bisa menyimpan variabel itu di objek ui.item itu sendiri dan mengambilnya dalam fungsi berhenti sebagai berikut:

$( "#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());
    }
});

5
Anda menghemat hari saya! Pak pertanyaan, bagaimana saya bisa menyimpan posisi baru dengan menggunakan ajax?
mrrsb

5
Mengapa mereka tidak memiliki contoh sederhana seperti ini di halaman manual sortir? Saya benar-benar tidak menyadari barang-barang dari startmampu berada dalam stopruang lingkup sampai saya melihat ini.
Sablefoste

1
Saya tidak mengerti mengapa fungsi umum seperti itu bukan bagian dari penyortiran ...
burzum

14

Gunakan pembaruan alih-alih berhenti

http://api.jqueryui.com/sortable/

pembaruan (acara, ui)

Ketik: sortupdate

Peristiwa ini dipicu ketika pengguna berhenti menyortir dan posisi DOM telah berubah.

.

berhenti (acara, ui)

Ketik: sortstop

Acara ini dipicu ketika pengurutan telah berhenti. Jenis acara: Peristiwa

Sepotong kode:

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>

4

Sesuai dokumentasi resmi UI sorting jquery: http://api.jqueryui.com/sortable/#method-toArray

Dalam acara pembaruan. menggunakan:

var sortedIDs = $( ".selector" ).sortable( "toArray" );

dan jika Anda mengingatkan atau menghibur var ini (diurutkan ID). Anda akan mendapatkan urutan Anda. Silakan pilih sebagai "Jawaban Benar" jika itu adalah jawaban yang benar.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.