jQuery UI 정렬 가능 위치


답변:


296

ui이벤트에 제공된 객체 를 사용할 수 있습니다 . 구체적으로 stop이벤트 , ui.item속성 및 을 원합니다 .index().

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

실제 데모를 볼 수 있습니다 . .index()값은 0부터 시작하므로 표시 목적으로 +1을 원할 수 있습니다.


60
추가로, 이동 된 항목의 위치를 ​​추적하려면 (0 위치에서 2 위치로 이동) 시작 이벤트에서 ui.item.index () 값에 액세스하여 해당 값을 저장해야합니다.
— David Boike

#sortable div 내에서 정렬 가능한 포틀릿 div-id를 찾는 방법이 있습니까?
— Frank

또한으로 드래그 하는 동안 위치를 추적해야하는 경우을sort 사용할 수 있습니다 ui.placeholder.index. 지수는 위치 1에서 시작
— 루이 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
당신은 내 하루를 저장합니다! 질문, 아약스를 사용하여 새로운 위치를 어떻게 구할 수 있습니까?
— mrrsb

5
정렬 가능한 매뉴얼 페이지에 이와 같은 간단한 예가없는 이유는 무엇입니까? 나는 이것을 볼 때까지 아이템 start이 stop스코프에있을 수 있다는 것을 실제로 알지 못했습니다 .
— Sablefoste

1
왜 그런 공통 기능이 정렬 가능한 부분이
— 아닌지 모르겠습니다

14

사용 갱신 하는 대신 정지

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

업데이트 (event, ui)

유형 : sortupdate

이 이벤트는 사용자가 정렬을 중지하고 DOM 위치가 변경되면 트리거됩니다.

.

중지 (event, 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

jquery 정렬 가능한 UI의 공식 문서에 따라 http://api.jqueryui.com/sortable/#method-toArray

업데이트 이벤트에서. 사용하다:

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

그리고이 var (sortedIDs)를 경고하거나 콘솔하면. 당신은 당신의 순서를 얻을 것이다. "올바른 답변"으로 선택하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.