2012-11-23 3 views
2

내 페이지에 정렬 가능한 목록이 있습니다. 사용자의 의도, 즉 드래그 한 항목과 드래그 한 요소의 이전 및 새 (잠재적 인) 위치 만 알면됩니다.jQuery UI sortable : DOM 변경을 방지하는 새 항목 위치 얻기

하지만 사실 내 DOM을 변경하려면 jQuery 정렬이 필요하지 않습니다. 직접 해보고 싶습니다. 다음은 예입니다 : 내가 ui.originalPositionui.position을 사용하여 새 위치를 계산할 수 있습니다 알고

$(".sortable-list").sortable({ 
    items: ".sortable-item", 
    stop: function (event, ui) { 
    // prevent DOM changes 
    $(this).sortable('cancel'); 
    // get the indices 
    var oldIndex = $(this).find('.sortable-item').index(ui.item); 
    var newIndex = 'how?'; // this is the question 
    } 
}); 

,하지만 난 그게 올바른 자리에 자리를두고 있기 때문에 이미이 일을하고있다 jQuery를-정렬 믿고, 그래서 난 그냥 원하는 가치를 얻으십시오.

어떻게하면됩니까?

답변

2

음, 질문을 쓰는 동안 실제로 해결책을 찾았습니다.

$(this).sortable('cancel')을 호출하기 전에 jQuery-sortable이 DOM을 변경한다는 것이 밝혀졌습니다. 이 호출이 실제로하는 일은 이고, 변경된 플러그인은입니다.

여기 작업 코드입니다 : 솔루션을 게시

$(".sortable-list").sortable({ 
    items: ".sortable-item", 
    stop: function (event, ui) { 
    var newIndex = $(this).find('.sortable-item').index(ui.item); 
    $(this).sortable('cancel'); // revert changes 
    var oldIndex = $(this).find('.sortable-item').index(ui.item); 
    } 
}); 
+0

감사합니다 - 그것은 내 문제를 해결 :) – Garfonzo

+0

@noistseuq 도움이 : 난 당신이 부분적으로 올바른 생각합니다. 제 경험상 IE 7과 8은 jQueryui sortable의 중지 지점에서 DOM을 원본으로 되돌리고 취소 요청시 이벤트를 수신하지 않습니다. 그것은 나중에 약간의 시간을 보낸다. – Phil