2011-11-07 65 views
6

我有一個排序喜歡這個頁面上第二個例子:jQuery的排序更改排序行爲

http://jqueryui.com/demos/sortable/items.html

的排序爲目標的混合:

  • 那些可以拿起並重新排列
  • 已禁用的項目,無法拾取(但是放置目標)。

問題在於組件解釋我對排序的意圖。作爲一個例子拾取以下列表的第一個元素,並將其拖動到第四位置將看起來像這樣:

A B C X X ==> B C X A X

在這裏,X的表示禁用的項目。

在我的應用程序中,我希望排序行爲有所不同。當一個目標被拾起並放置在一個禁用物品(X)上時,該列表不應該移動以適應目標,而是目標和禁用物品應該交換位置。

在相同的例子如(拖動從第一到第四)之前:

ABCXX ==> XBCAX

如果放置目標是正常的(即,不禁止)的行爲應該是相同的如前(拖動從1日至3日):

ABCXX ==> BCAXX

它認爲這樣想重新安排在一個日曆約會,當你拿起一個從一個日期,並將其放到一個空的日期,你不會希望其他約會隨着一天洗牌。

+0

貌似http://stackoverflow.com/questions/2263687/jquery-sortable-obtain-2-elements-being-swapped – sirhc

回答

2

我已經放在一起你想要的功能jsfiddle。

基本上,我綁定到可排序的更改函數,並檢查幫助器剛剛通過的元素是否被禁用。如果是,那麼我將該元素移動到幫助者的起始位置。

這裏是的jsfiddle http://jsfiddle.net/YjhzR/3/

希望這有助於!

更新:

http://jsfiddle.net/YjhzR/6/

+1

推薦的Swappable插件。如果這是OP想要的(我仍然不確定是什麼),那麼恭喜你,你應該得到賞金:)另一方面 - 當我用你的小提琴,當我試圖在旁邊放一些東西時,X1消失了,OP在他的例子中顯示了不變的選項數。 – naugtur

+0

我不明白你的兩條陳述,「當我試圖在旁邊放一些東西時,X1消失了」。您只能在我的小提琴中將元素移動到另一個元素的上方或下方。並且「OP在他的例子中顯示了不變數量的選項」 –

+1

這看起來非常有希望,儘管我也看到類似於naugtur的東西。基本上,如果在X1上拖動C,則X1消失,產生A B C,結果應該是A B X1 C.更一般地說,當您嘗試交換兩個相鄰的項目時,它們中的一個是X1時,它似乎中斷。非常感謝代碼,即使目前這是非常有用的開始 - 如果你可以修復這個錯誤,賞金就是你的! – pheelicks

5

這不會完全成爲您的問題的答案,但我認爲您不應該強制使用現成的解決方案,當它不適合案件。

我想你應該創建自己的控件來保持元素並使用jQuery UI的可拖動實現行爲。您的用例與某些基本行爲邏輯中的示例不同。

如果您得到更多的要求,對未來也是有益的。

+0

我不與你同意不要強迫現成的解決方案去做一些它沒有設計的事情。但是,不是一個jQuery專家,我很好奇是否有一種「好方法」來改變排序邏輯。 sirhc的鏈接看起來像是創建自定義控件的有希望的起點 – pheelicks

+0

我仍然認爲按照您的計劃做更多的工作。請報告你做了什麼,如果你成功了。 – naugtur

+0

雖然Keith確實爲我的問題提供了一個有效的解決方案,但在玩了一下之後,事實證明這實際上是重新安排列表的一種非常令人困惑的方式。因此,我可能會使用sirhc – pheelicks