2010-07-31 10 views
22

Mein Problem: Das sortierbare Ereignis out: Wird ausgelöst, wenn ich etwas in die Liste ziehe oder wenn ich die Liste sortiere. Aber ich möchte nur die Funktion starten, wenn ich einen Gegenstand heraus ziehe. JQuery Sortierbar, aktuelles Element durch Ziehen löschen

Mein Code

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

     }); 

Arbeitsbeispiel http://jsfiddle.net/FrbW8/22/

+0

Hmm, ist das ein Jquery Bug? Coz ... Out -> Dieses Ereignis wird ausgelöst, wenn ein sortierbares Objekt aus einer verbundenen Liste verschoben wird. Start -> Dieses Ereignis wird beim Start der Sortierung ausgelöst. Stop -> Dieses Ereignis wird ausgelöst, wenn die Sortierung gestoppt wurde. – Peter

+2

+1 für jsFiddle –

+3

Blair - Das ist nur die dümmste Ausrede, die ich bisher auf SO gesehen habe. – Christian

Antwort

4

Dies ist das Standardverhalten des aus Rückruf. Sehen Sie dieses jquery ui trac ticket

Ich stimme wirklich nicht mit dem "logischen" Verhaltenskonzept überein.

„Beachten Sie jedoch, dass die‚out‘Rückruf noch ausgelöst werden, wenn Sie in eine Liste ziehen und lassen Sie die Maus (aber nicht, wenn Sie nicht über die Liste). Dies ist logisches Verhalten und passiert für normale Sorables ebenso. "

+0

ist es möglich, das Feuer zu stoppen? Zum Beispiel füge ich sortstart und sortstop hinzu. -> Wenn sortart: -> abbort out: ... wenn sortstop: -> abbort out: – Peter

+0

Das wird chaotisch werden, denke ich. Du könntest versuchen, deine Hände schmutzig zu machen und die jquery ui src ändern, um dieses "out" Verhalten zu stoppen. – redsquare

+0

Hey redsquare, aber wenn ich die Quelle ändere, muss ich sie nach jedem Update ändern. :( Richtig? – Peter

33

Verwenden beforeStop das Element abzufangen und es entfernen:

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(); 
    } 
} 

(ich dies ursprünglich im Google gefunden, aber nicht mehr den Link finden So, ich entschuldige mich für die Quelle nicht referenzieren..)

+3

Hier ist der Link: http: //forum.jquery.com/topic/drag-item-out-of-a-sortable – lo5

+0

Es sieht so aus, als verhindere das normale Sortieren der Elemente. Wenn ich dies benutze und die Elemente zum Sortieren ziehe, auch wenn es sich nie aus dem Steuerelement herausbewegt, wenn das Element entfernt wird. –

3

Die anderen Lösungen scheinen nicht mit verbundenen sortierbaren Listen zu funktionieren, also poste ich meine eigene Lösung, die für meinen Fall tadellos funktioniert. Dies nutzt das "drop-fähige" Plugin, das das "drop" -Ereignis erfasst, wenn die Elemente außerhalb der sortierbaren Listen abgelegt werden.

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

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

ist hier ein jsfiddle dieses Ansatzes in Aktion: http://jsfiddle.net/n3pjL/

+0

Das ist ein Ansatz, den ich heute erfolglos versuchte, weil ich die "gierige" Option nicht gefunden habe. Danke für den Tipp! – Tsunamis

1

I this.element.find('.ui-sortable-helper').length verwenden Unterschied zwischen "aussortieren Ereignisse" zu machen und "Drop-out-Ereignisse". Wenn Sie sortieren, hat das sortierte Element die Klasse ui-sortable-helper. Nach dem Absturz gibt es keine andere ui-sortierbare Klasse, bis Sie wieder anfangen zu sortieren (zumindest in meinem Skript). Ich hoffe, jemandem zu helfen.