2010-07-22 49 views
25

這個問題已經結束了,但似乎沒有人遇到過和我一樣的問題。可排序+嵌套列表與jQuery UI 1.8.2

當我做這樣的事情

$(function(){ 
    $('#unique-ul').sortable({items:'li'}); 
}); 

我希望它「只是工作」。總的來說,它確實如此。我可以從任何列表拖動任何<li>到任何其他列表,並且該<li>的任何子列表都會隨之拖動。

但是,拖動時,它似乎很困惑它應該放在哪裏。這裏是一個使用1.8.0的例子;它顯示相同的行爲。

http://jsbin.com/ewuxi3/

所有我發現這個使我相信,這種行爲是jQuery用戶界面支持的其他反應;例如,這裏是一個針對嵌套的可拖動對象1.7註冊的bug:http://dev.jqueryui.com/ticket/4333

我找不到任何其他有此問題的人,因此表明我做錯了。任何線索?

回答

75

發生這種情況是因爲Sortable並不真正知道您是否在嵌套<li>之上或包含它的那個嵌套。一種解決方案是使用這樣的結構:

<ul> 
    <li><div>Item 1</div> 
    <ul> 
     <li><div>Subitem 1</div></li> 
     <li><div>Subitem 2</div></li> 
    </ul> 
    </li> 
    <li><div>Item 2</div></li> 
    <li><div>Item 3</div></li> 
</ul> 

,並設置選項toleranceElement: '> div'。我不知道爲什麼它沒有記錄,但它在那裏,它告訴Sortable在計算交叉點時只考慮<div>

如果您有興趣,我最近developed a plugin這使得嵌​​套排序更容易,允許在飛行中創建新的嵌套列表。

+4

你的插件看起來非常出色 - 我在演示中玩過一段時間,當我有空時,我會自己實現它。 – Altreus 2010-09-16 08:57:02

+1

(你會考慮標記答案爲接受?:)) – mjsarfatti 2010-10-02 22:28:55

+1

這看起來是BOSS。我花了整個下午試圖找到像這樣簡單的事情!謝謝! – 2010-11-04 17:56:38