2011-01-11 15 views
6

Perché questo codice non consente di rilasciare l'helper nella regione trascinabile?Impossibile rilasciare jquery ui helper su droppable

$(".product").draggable({ 
    revert: 'invalid', 
    cursorAt: { top: -12, left: -20 }, 
    helper: function(event) { 
     return $('<div class="product_helper"></div>'); 
    } 
    }); 
    $(".droppable").droppable({ 
    accept: '.product_helper', 
    drop: function(event, ui) { 
     $(this).append(ui.helper); 
    } 
    }); 

È persino possibile rilasciare un helper su un droppable?

risposta

11

È completamente possibile rilasciare un clone dell'helper, tuttavia l'helper stesso (come nell'esempio) non può essere eliminato.

Ecco un jsFiddle dimostrando cadere un aiutante clonato: http://jsfiddle.net/jKabn/1/

Ecco il relativo codice:

$(".product").draggable({ 
    revert: 'invalid', 
    cursorAt: { top: -12, left: -20 }, 
    helper: function(event) { 
     return $('<div class="helper">Helper</div>'); 
    } 
    }); 
    $(".droppable").droppable({ 
    drop: function(event, ui) { 
      //clone and remove positioning from the helper element 
      var newDiv = $(ui.helper).clone(false) 
       .removeClass('ui-draggable-dragging') 
       .css({position:'relative', left:0, top:0}); 

      $(this).append(newDiv); 
    } 
    }); 

L'helper viene rimosso dopo goccia è eseguito in jQuery. Per mantenerlo dovrai rimuovere il css specifico per il posizionamento e il posizionamento, oltre a clonare l'elemento. Nel jsFiddle c'è anche una manifestazione per far cadere elemento "trascinabile" così (non che è stato particolarmente rilevante per la tua domanda mi è stato semplicemente aggiungendo per me.)

Speranza che aiuta

+0

Grazie, +1 per una chiara spiegazione del problema (non essere in grado di rilasciare l'helper, ma doverlo clonare) e per il funzionamento del js fiddle. Ho aggiunto un '.css ({position: 'absolute', left: 0, top: ui.offset.top});' così che l'helper rilasciato mantenne la sua posizione. Grazie –

+0

Nessun problema contento di aver potuto aiutare. Inoltre, se si resettano i propri attributi css di sinistra e top, il clone rilasciato manterrà la posizione: assoluta. (Il motivo per cui l'ho impostato a relativo era che volevo che si impilasse nell'area di rilascio). –

+0

Voglio la stessa funzionalità ma 'droppable' dovrebbe anche supportare 'ordinabile', ma affrontando alcuni problemi qui http://jsfiddle.net/6J3AB/. Eventuali suggerimenti? – Ashok

1

un problema che ho avuto è stato avere un elemento trascinabile troppo ampio per essere lasciato cadere su un elemento trascinabile se l'opzione di tolleranza è al valore predefinito di 'intersecare'.

"intersecare" significa che il trascinabile può essere lasciato cadere quando il 50% di esso è sopra il droppabile. E questo è impossibile se è più del doppio.

I miei oggetti trascinabili avevano un valore variabile, quindi la loro larghezza variava e anche se potevano essere lasciati cadere. Ho usato 'puntatore' invece e passa da dove si trova il mouse.

Problemi correlati