2009-09-29 31 views
7

我有一個簡單的jQuery排序基於列表如下:jQuery的排序項高度

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

我已經創建了一個輔助函數,這樣不管是什麼項目的內容而定,助手總是固定的大小。

我的問題是,如果我拖動一個有很多內容的項目(說幾段文字),即使我的幫手只有一個高度的單行,該項目不會落在下面的項目,直到它已經旅行了至少我的項目的原始高度。

例如:

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

如果我拖動物品1幫助我變成這個成單行 - 好和容易拖動。但是,在item1可以在item2和item3之間放置之前,我仍然需要將鼠標向下移動5行。一旦我將它拖拽到足夠的高度,該物品就會像我期望的那樣起作用,而我不再需要將其拖動到原始高度。

我試過了所有我能想到的排序選項,但無濟於事,希望有人有一個建議。

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

回答

0

你可以搶Div的當前高度被拖動,將其保存在一個變量,一個通用的高度分配給DIV被拖動。放置後,使用回調來重新分配變量中的高度。

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

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

您可能還需要考慮forceHelperSize

25

多發撕裂後,我加入這個事件的排序:

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

似乎這樣的伎倆,因爲我覺得開始()在助手創建後調用,因此刷新位置會重置高度。也許jQuery應該自己做,但現在我很高興。

+0

所以forceHelperSize(http://jqueryui.com/demos/sortable/#option-forceHelperSize)是沒有用的? – jakeisonline 2009-09-30 21:35:02

+4

@John神聖的廢話,我希望我可以upvote這個+1000倍。 – shmeeps 2011-08-05 14:57:52

+0

我同意shmeeps!我在完全損失 – orourkedd 2011-12-28 23:02:47

3

以下爲我工作:

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

對我來說,我不知道爲什麼不是upvoted的答案 – 2015-03-03 10:08:25