2010-07-31 20 views
22

Il mio problema: L'evento sortable out: si attiva quando trascino qualcosa nell'elenco o quando ordino l'elenco. Ma voglio solo avviare la funzione quando trascino un elemento.Jquery Sortable, elimina l'elemento corrente trascinandolo

Il mio codice

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

     }); 

esempio Lavorare http://jsfiddle.net/FrbW8/22/

+0

Hmm, questo è un bug Jquery? Coz ... Out -> Questo evento viene attivato quando un oggetto ordinabile viene spostato da un elenco collegato. Start -> Questo evento viene attivato quando inizia l'ordinamento. Stop -> Questo evento viene attivato quando l'ordinamento è stato interrotto. – Peter

+2

+1 per jsFiddle –

+3

Blair - Questa è solo la scusa più stupida che ho visto finora su SO. – Christian

risposta

4

Questo è il comportamento predefinito della richiamata fuori. Vedi questo jquery ui trac ticket

Non sono davvero d'accordo con la nozione di comportamento "logico".

"Tuttavia, si noti che il 'fuori' callback sarà ancora essere attivato se si trascina in una lista e poi rilascia il mouse (ma non se non siete oltre l'elenco). Questo è comportamento logico e succede anche per i normali normali. "

+0

è possibile fermare l'incendio? Ad esempio, aggiungo sortstart e sortstop. -> Se sortart: -> abbreviare: ... se sortstop: -> abbreviare: – Peter

+0

Che sarà disordinato penso. Potresti provare a sporcarti le mani e cambiare il jquery ui src per fermare questo comportamento "fuori". – redsquare

+0

Hey redsquare, ma quando cambio l'src, devo cambiarlo dopo ogni aggiornamento ui. :( Right? – Peter

33

Usa beforeStop per intercettare l'oggetto e rimuoverlo:

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

(Originariamente ho trovato questo in Google, ma non può più trovare il link Così, mi scuso per non fa riferimento alla fonte..)

+3

Ecco il link: http: //forum.jquery.it/topic/drag-item-out-of-a-sortable – lo5

+0

Sembra che questo impedisca il normale ordinamento degli articoli. Se lo uso e trascino gli oggetti per ordinare, anche se non esce mai dal controllo, se rimuove l'oggetto. –

3

Le altre soluzioni non sembrano funzionare con elenchi ordinabili collegati quindi sto postando la mia soluzione che funziona perfettamente per il mio caso. Questo fa uso del plugin "droppable" che cattura l'evento "drop" quando gli elementi vengono rilasciati al di fuori degli elenchi ordinabili.

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

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

Ecco una jsfiddle di questo approccio in azione: http://jsfiddle.net/n3pjL/

+0

Questo è un approccio che ho provato oggi senza successo, perché non ho trovato l'opzione "golosa". Grazie per il suggerimento! – Tsunamis

1

Io uso this.element.find('.ui-sortable-helper').length di fare differenza tra "risolvere evento" e "drop out evento". Durante l'ordinamento, l'elemento ordinato ha un supporto di classe ui-ordinabile. Dopo il rilascio non c'è altra classe di ordinamento se non si inizia a riordinare (almeno nel mio script). Spero di aiutare qualcuno.

Problemi correlati