2012-02-04 61 views

回答

0

那麼,這裏是一個「天真」(如在,採取第一種方法,跳到腦海)版本,使用可排序的receive事件。使用N來表示任何一方的元素的最大數量。

http://jsfiddle.net/3NBT7/1/

$(function(){ 
    var N = 4; 

    $("#left-side, #right-side").sortable({ 
     axis: "x", 
     connectWith: ".droppable", 
     receive: reSort 
    }) 
    .disableSelection(); 

    // Called when a sortable item has been received, see above 
    function reSort(event, ui) 
    { 
     var other, children; 

     children = $(this).children(); 

     if (children.length > N) 
     { 
     // Find the other sortable panel, based on id. 
     // There are other ways, depending on the HTML. 
     other = ($(this).attr("id") == "left-side") 
       ? $("#right-side") 
       : $("#left-side"); 

     // Insert last child before first child of other: 
     children.last().insertBefore(other.children().first()); 
     } 
    } 
}); 

如果訴諸依賴於身邊,我會使用if/else語句來代替:

http://jsfiddle.net/3NBT7/4/

 if (children.length > N) 
     { 
      if ($(this).attr("id") == "left-side") 
      { 
       children.last().insertBefore($("#right-side").children().first()); 
      } 
      else 
      { 
       children.first().insertAfter($("#left-side").children().last()); 
      } 
     } 
+0

這是好事!但看着我認爲,如果在右側排序左側元素並且有太多......右側的第一個變爲左側的最後一個,則會更好。 但我認爲這是可以實現的一個簡單的檢查和一個相反的功能,對吧? 嗯,但我不知道如何獲得目的地ID – 2012-02-05 11:50:03

+0

我可能會重寫它是一個if else,即「如果這是左側」做到這一點,否則做到這一點。請參閱編輯。 – JimmiTh 2012-02-05 12:28:16

+0

非常感謝你! – 2012-02-05 13:03:46