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
정렬 가능한 매뉴얼 페이지에 이와 같은 간단한 예가없는 이유는 무엇입니까? 나는 이것을 볼 때까지 아이템 startstop스코프에있을 수 있다는 것을 실제로 알지 못했습니다 .
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.