2013-01-21 71 views
5

我有一個jQuery UI簡單的例子。基本上,我必須列出項目,每一個都是可排序的。我想要完成的是以下內容: 取消對相同列表的排序。舉個例子,如果我點擊列表1上位置1上的一個元素,然後將它拖到位置6,然後放下。我想要防止這種情況,但是如果我將列表中的元素放入列表2中,那沒關係。jQuery UI排序 - 兩個列表,並防止排序內部來源列表

我不知道如何指定,以適應我的requeiments。 ConnectWith似乎沒有足夠:

$("#sortable").sortable({ 
    connectWith: [$('#sortable2')] 
}); 

$("#sortable2").sortable({ 
    connectWith: [$('#sortable')] 
}); 

這裏是例子:

http://jsfiddle.net/sQeZE/3/

+0

你的意思是你只* *希望能夠從表1把,並給予列出2? –

+0

是的,但如果我將元素放在與原點相同的列表上,則阻止排序。我解釋我的自我嗎? –

回答

2

這可能不是確切在找什麼,但你可以綁定到receivestop事件(它們的順序觸發)。 receive表示列表項是從另一個列表中收到的。當這被觸發時,您可以臨時解除阻止排序。 stop企圖阻撓隨時排序:

var blocksort = true; 
//Using jQuery 1.6.4, but use `.on` when available 
$("#sortable, #sortable2").bind('sortreceive', function() { 
    blockSort = false; 
}).bind('sortstop', function (e) { 
    if (blockSort) { 
     e.preventDefault(); 
    } 
    blockSort = true; 
}); 

http://jsfiddle.net/sQeZE/5/

+0

非常感謝。它按我的要求工作 –

+0

儘管我的要求有點不同。這是幫助我走向正確方向的唯一答案......感謝一堆:-) –

1

一種選擇將是限制你的列表的遏制是其他列表,像這樣:

$("#sortable").sortable({ 
    connectWith: [$('#sortable2')], 
    containment: $('#sortable2') }); 

$("#sortable2").sortable({ 
    connectWith: [$('#sortable')], 
    containment: $('#sortable') }); 

這使得#sortable的項目只能在#sortable2的列表中排序,反之亦然

+0

理論上不錯,但「遏制」也限制了可分揀項目的移動,所以對用戶來說影響非常大。 –

+0

這是一個很好的觀點,但我的iu表現得很奇怪。非常感謝您的時間和代碼。 –