Vị trí sắp xếp giao diện người dùng jQuery


Câu trả lời:


296

Bạn có thể sử dụng uiđối tượng được cung cấp cho các sự kiện, cụ thể là bạn muốn stopsự kiện , thuộc ui.itemtính.index(), như thế này:

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

Bạn có thể xem bản demo hoạt động ở đây , hãy nhớ .index()giá trị là dựa trên số không, vì vậy bạn có thể muốn +1 cho mục đích hiển thị.


60
Như một lưu ý bổ sung, nếu bạn muốn theo dõi mục được di chuyển đến từ đâu (chuyển từ vị trí 0 sang vị trí 2) thì bạn cần truy cập giá trị ui.item.index () trong sự kiện bắt đầu và lưu trữ giá trị đó.
David Boike

Có cách nào để tìm các portlet div-id có thể sắp xếp trong #sortable div không?
Frank

Ngoài ra, nếu bạn cần phải theo dõi vị trí trong kéo với sort, bạn có thể sử dụng ui.placeholder.index. Chỉ số bắt đầu ở vị trí 1.
Loïc Pennamen

127

Tôi không chắc chắn nơi tôi sẽ lưu trữ vị trí bắt đầu, vì vậy tôi muốn giải thích về nhận xét của David Boike. Tôi thấy rằng tôi có thể lưu trữ biến đó trong chính đối tượng ui.item và truy xuất nó trong hàm dừng như vậy:

$( "#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
Bạn tiết kiệm trong ngày của tôi! Thưa ông, làm thế nào tôi có thể lưu vị trí mới bằng cách sử dụng ajax?
mrrsb

5
Tại sao họ không có một ví dụ đơn giản như thế này trên các trang người đàn ông có thể sắp xếp? Tôi thực sự không nhận ra các vật phẩm startcó khả năng nằm trong stopphạm vi cho đến khi tôi nhìn thấy thứ này.
Sablefoste

1
Tôi không hiểu tại sao một chức năng phổ biến như vậy không phải là một phần của sắp xếp ...
burzum

14

Sử dụng cập nhật thay vì dừng

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

cập nhật (sự kiện, ui)

Loại: sắp xếp

Sự kiện này được kích hoạt khi người dùng dừng sắp xếp và vị trí DOM đã thay đổi.

.

dừng lại (sự kiện, ui)

Loại: sắp xếp

Sự kiện này được kích hoạt khi sắp xếp đã dừng. Loại sự kiện: Sự kiện

Đoạn mã:

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

Theo tài liệu chính thức của UI sắp xếp jquery: http://api.jqueryui.com/sortable/#method-toArray

Trong sự kiện cập nhật. sử dụng:

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

và nếu bạn cảnh báo hoặc điều khiển var này (sortIDs). Bạn sẽ nhận được trình tự của bạn. Vui lòng chọn là "Câu trả lời đúng" nếu đó là câu trả lời đúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.