2011-11-12 13 views
5

In poche parole, se si utilizza trascinabile con una griglia e si imposta il ripristino: 'non valido' su oggetti trascinabili non ritorna esattamente allo stesso da dove hai iniziato a trascinarli. Tornano in un posto vicino a dove hai iniziato a trascinarli ... piuttosto strano.ripristina 'non valido' con la griglia non ritorna alla posizione iniziale con jQuery UI Draggable

Questo potrebbe essere un bug nell'interfaccia utente. Se è così, qualcuno sa se c'è una soluzione alternativa per questo?

Esempio: http://jsfiddle.net/n2AUv/11/

Grazie! John.

+0

Tutto si comporta in modo ragionevole con solo 'grid' o semplicemente' revert', ma tutto il senso scompare quando si hanno entrambi. La posizione che ritorna sembra casuale. Stiamo vedendo la stessa assurdità completa? –

+0

È quello che vedo .. è frustrante perché è un po 'uno stopper per il mio progetto. –

+0

Lo chiamerei un bug e farei un bug report, il comportamento attuale non ha alcun senso. Potresti re-genitore degli elementi quando vengono rilasciati? Questo potrebbe aiutare, gli offset negativi (usa il tuo ispettore DOM e li vedrai) potrebbero confondere qualcosa. –

risposta

1

grid option documentation dice:

Snap il trascinamento helper ad una griglia, ogni x ed y pixel.

Quindi sembra che grid sia stato progettato per essere utilizzato solo con qualche tipo di aiuto. E in realtà, se si utilizza helper: "clone", le cose vanno bene: l'helper ritorna vicino al luogo dell'istanza originale e

Sì, questo sembra un bug nell'interfaccia utente. Ma c'è una soluzione: use helper for dragging:

$(".dragme").draggable({ 
    revert: true, 
    helper: "clone", 
    grid: [50,50] 
}); 

Questa soluzione presenta altri bug strano: dopo un calo valido droppable aiutante zona viene distrutta e l'istanza originale esiste al suo posto (si può vedere a fiddle).

Questo errore in qualche modo risolto per draggable con connectToSortable opzioni. Forse è anche possibile risolvere l'errore nel tuo caso.

Inoltre, sospetto che l'intero problema sia dovuto a this chunk of code trascinabile.

+1

@John Hunt Se aiuta, ecco un tweak per il codice di yko che posiziona correttamente l'elemento trascinato nella posizione corretta nel div drop di destinazione (utilizzando il posizionamento assoluto): http://jsfiddle.net/greglockwood/EBHWr/ – GregL

+0

@ GregL molto carino. In realtà pensavo che "drop" fosse attivato su qualsiasi drop, non solo valido. Sembra che la mia soluzione combinata con la tua possa risolvere questo problema. Non ti dispiace se li unisco insieme nella mia risposta? – yko

+0

Niente affatto. È stato divertente prendere la tua risposta e correre con essa. Non puoi dividere le generosità, vero? :-) – GregL