2009-09-29 19 views
7

Mam proste jQuery sortable na podstawie listy w następujący sposób:wysokość jQuery sortable poz

<ul> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
</ul> 

I utworzeniu funkcji pomocnika tak, że niezależnie od tego, co może być zawartość elementu, pomocnik ma zawsze taki sam stały rozmiar.

Mój problem polega na tym, że jeśli przeciągam element, który ma dużo treści (mówi kilka akapitów tekstu), mimo że mój pomocnik ma tylko jedną linię wysokości, przedmiot nie zostanie umieszczony na poniższym elemencie, dopóki nie zostanie przejechał co najmniej pierwotną wysokość mojego przedmiotu.

Na przykład:

<ul> 
    <li>Item 1 
    line2 
    line3 
    line4 
    line5 
    </li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
</ul> 

Gdybym przeciągnij Pozycja1 moim pomocnikiem zamienia to w jednej linii - ładne i łatwe do przeciągania. Jednak wciąż muszę przesunąć myszką 5 linii w dół ekranu, zanim item1 może zostać upuszczony między item2 a item3. Po przeciągnięciu wystarczającej wysokości element wydaje się działać tak, jak się spodziewam i nie muszę już przeciągać oryginalnej wysokości.

Próbowałem wszystkich możliwych do sortowania opcji, ale bez skutku i mam nadzieję, że ktoś ma sugestię.

$('#sortable').sortable({ 
    placeholder: 'highlight', 
    axis: 'y', 
    helper: function(event) { 
    return $(this).find('.drag').clone(); 
}, 
}); 

Odpowiedz

0

Można pobrać aktualną wysokość div przeciągane, zapisać go w zmiennej i przypisać wysokość rodzajowego do DIV przeciągane. Po umieszczeniu użyj numeru wywołania, aby ponownie przypisać wysokość wewnątrz zmiennej.

var curHeight = $(div).height(); 

$(div).css({height: 20px;}); 

Można również rozważyć forceHelperSize

25

Po długich włosów łzawienie dodałem to wydarzenie do oczyszczenia nasion:

start: function(event, ui) { 
    $(this).sortable('refreshPositions') 
    }, 

Wydaje rade jak myślę rozpoczęcia() jest wywoływana po utworzeniu helpera, więc odświeżenie pozycji powoduje zresetowanie wysokości. Prawdopodobnie jQuery powinien to zrobić sam, ale na razie jestem szczęśliwy.

+0

Więc forceHelperSize (http://jqueryui.com/demos/sortable/#option-forceHelperSize) nie miało sensu? – jakeisonline

+4

@John Holy crap, chciałbym móc przyjąć to +1000 razy. – shmeeps

+0

Zgadzam się z shmeeps! Byłem kompletnie zagubiony – orourkedd

3

Następujące pracował dla mnie:

stop: function(event,ui){ 
    ui.item.height("auto"); 
} 
+0

dla mnie też, nie wiem dlaczego nie jest to przegłosowana odpowiedź –