jQuery UI ตำแหน่งที่จัดเรียงได้


คำตอบ:


296

คุณสามารถใช้uiวัตถุให้กับเหตุการณ์ที่เกิดขึ้นโดยเฉพาะคุณต้องการให้stopเหตุการณ์ที่ui.itemคุณสมบัติและ.index()เช่นนี้

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

คุณสามารถดูตัวอย่างการทำงานได้ที่นี่โปรดจำไว้ว่า.index()ค่านั้นเป็นแบบอิงศูนย์ดังนั้นคุณอาจต้องการ +1 เพื่อจุดประสงค์ในการแสดงผล


60
ในฐานะโน้ตเพิ่มเติมหากคุณต้องการติดตามตำแหน่งที่ไอเท็มที่ย้ายมาจาก (ย้ายจากตำแหน่ง 0 ไปยังตำแหน่ง 2) คุณจะต้องเข้าถึงค่า ui.item.index () ในเหตุการณ์เริ่มต้นและเก็บค่านั้น
David Boike

มีวิธีหา divable id ของพอร์ตเล็ตที่เรียงได้ภายใน div #sortable หรือไม่
Frank

นอกจากนี้ถ้าคุณจำเป็นต้องติดตามตำแหน่งในระหว่างการลากด้วยคุณสามารถใช้sort ui.placeholder.indexดัชนีเริ่มต้นที่ตำแหน่ง 1
Lo Pennc Pennamen

127

ฉันไม่แน่ใจว่าจะเก็บตำแหน่งเริ่มต้นไว้ที่ใดดังนั้นฉันต้องการอธิบายอย่างละเอียดเกี่ยวกับความคิดเห็นของ David Boikes ฉันพบว่าฉันสามารถเก็บตัวแปรนั้นไว้ในวัตถุ ui.item เองและดึงมันมาใช้ในฟังก์ชั่นหยุดดังเช่น:

$( "#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
คุณบันทึกวันของฉัน! ท่านถามฉันจะบันทึกตำแหน่งใหม่โดยใช้ ajax ได้อย่างไร
mrrsb

5
ทำไมพวกเขาถึงไม่มีตัวอย่างง่ายๆเช่นนี้ในหน้าคนที่เรียงลำดับได้? ฉันไม่ได้ตระหนักถึงสิ่งของที่startสามารถอยู่ในstopขอบเขตจนกว่าฉันจะเห็นสิ่งนี้
Sablefoste

1
ฉันไม่ได้รับมันทำไมเช่นการทำงานร่วมกันไม่ได้เป็นส่วนหนึ่งของการจัดเรียง ...
เบอร์ซัม

14

ใช้การอัปเดตแทนที่จะหยุด

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

อัปเดต (เหตุการณ์ UI)

ประเภท: sortupdate

เหตุการณ์นี้เกิดขึ้นเมื่อผู้ใช้หยุดการเรียงลำดับและตำแหน่ง DOM มีการเปลี่ยนแปลง

.

หยุด (เหตุการณ์ UI)

ประเภท: sortstop

เหตุการณ์นี้เกิดขึ้นเมื่อการเรียงลำดับหยุดลง ประเภทเหตุการณ์: กิจกรรม

ชิ้นส่วนของรหัส:

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

ตามเอกสารอย่างเป็นทางการของ UI ที่สามารถจัดเรียง jquery: http://api.jqueryui.com/sortable/#method-toArray

ในการอัพเดทเหตุการณ์ ใช้:

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

และถ้าคุณแจ้งเตือนหรือคอนโซล var นี้ (sortIDs) คุณจะได้รับลำดับของคุณ โปรดเลือกเป็น "คำตอบที่ถูกต้อง" หากเป็นคำตอบที่ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.