2010-07-31 57 views
22

我的問題: 可排序的事件出現:當我在列表中拖動某些東西或對列表進行排序時觸發。 但我只想在我拖出一個項目時啓動該功能。Jquery可排序,通過拖出來刪除當前項目

我的代碼

 $(document).ready(function ust() 
     {  
      $('#div1').sortable({ 
       out: function(event, ui) { $('#nfo').append('OUT<br />'); } 
      }); 

     }); 

工作實例 http://jsfiddle.net/FrbW8/22/

+0

嗯,這是一個JQuery的錯誤? Coz ... Out - >當可分類項目從連接列表中移出時觸發此事件。 開始 - >當開始排序時觸發此事件。 停止 - >當排序停止時,將觸發此事件。 – Peter 2010-07-31 07:10:16

+2

+1爲jsFiddle – 2010-07-31 07:32:30

+3

布萊爾 - 這只是我迄今爲止見過的最愚蠢的藉口。 – Christian 2011-03-17 08:23:21

回答

4

這是出回調的默認行爲。看到這個jquery ui trac ticket

我真的不同意'邏輯'行爲的概念。

「不過,請注意,‘走出去’回調 仍然會被觸發,如果你拖 到一個列表,然後鬆開鼠標 (但如果你沒有在列表)。 這是邏輯行爲,對於正常排序也會發生 。「

+0

是否可以阻止火災?例如,我添加sortstart和sortstop。 - >如果sortart: - > abbort out:... if sortstop: - > abbort out: – Peter 2010-07-31 07:23:11

+0

這會讓我覺得混亂。你可以嘗試需要把你的手弄髒,並改變jquery ui src來停止這種'out'行爲。 – redsquare 2010-07-31 07:29:58

+0

Hey redsquare, 但是當我更改src時,我必須在每次更新後更改它。 :( 對吧? – Peter 2010-07-31 08:29:01

33

使用beforeStop攔截該項目,並刪除:

receive: function(e, ui) { sortableIn = 1; }, 
over: function(e, ui) { sortableIn = 1; }, 
out: function(e, ui) { sortableIn = 0; }, 
beforeStop: function(e, ui) { 
    if (sortableIn == 0) { 
     ui.item.remove(); 
    } 
} 

(我最初發現這個在谷歌,但再也找不到鏈接所以,我不引用源道歉。 )

+3

這裏的鏈接:http://forum.jquery。com/topic/drag-item-out-of-a-sortable – lo5 2011-03-04 20:21:36

+0

看起來像這樣可以防止項目的正常排序。如果我使用它並拖動項目進行排序,即使它永遠不會移出控件,但是如果刪除項目。 – 2012-07-22 18:53:02

3

其他解決方案似乎沒有與連接的可排序列表一起工作,所以我張貼我自己的解決方案,完美適用於我的情況。當元素被放置在可排序列表之外時,這使用「可插入」插件來捕獲「drop」事件。

$('#div1').sortable({ 
    .... 
}).droppable({greedy: true}) 

$('body').droppable({ 
    drop: function (event, ui) {   
     ui.draggable.remove(); 
    } 
}); 

這裏是行動這種方法的的jsfiddle:http://jsfiddle.net/n3pjL/

+0

這是我今天嘗試的一種方法,因爲我沒有找到'greedy'選項。感謝提示! – Tsunamis 2016-09-19 15:38:00

1

我用this.element.find('.ui-sortable-helper').length,使「理清事件」和「退出事件」之間的區別。在排序時,排序項目具有類ui-sortable-helper。在下降之後,除非再次開始排序(至少在我的腳本中),否則沒有其他可排序的類。希望幫助某人。

相關問題