2011-01-11 12 views
6

Dlaczego ten kod nie pozwól mi upuścić pomocnika w regionie, który można zrzucić?Nie można upuścić jquery ui helper na 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); 
    } 
    }); 

Czy można nawet rzucić pomocnika na kopertę?

Odpowiedz

11

Całkowicie można usunąć klon pomocnika, ale sam pomocnik (jak w przykładzie) nie może zostać upuszczony.

Oto jsFiddle wykazując upuszczenie sklonowany pomocnika: http://jsfiddle.net/jKabn/1/

Tutaj jest związany kod:

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

Pomocnik jest usuwany po spadku jest wykonany w jQuery. Aby go zachować, musisz usunąć przeciągane specyficzne css i pozycjonowanie, a także sklonować element. W jsFiddle istnieje również demonstracja upuszczenie „przeciągać” element jak również (nie, że to szczególnie istotne na Twoje pytanie właśnie dodanie go do siebie.)

nadzieję, że pomoże

+0

Dzięki, +1 za wyraźne wyjaśnienie problemu (nie można go opuścić, ale trzeba go sklonować) i za sprawne skrzypce. Dodałem '.css ({position: 'absolute', left: 0, top: ui.offset.top});' tak, aby upuszczony helper zachował swoją pozycję. Dzięki –

+0

Żadnych problemów, cieszę się, że mogłem pomóc. Dodatkowo, jeśli po prostu zresetujesz lewy i górny atrybut css, upuszczony klon zachowa pozycję: absolutną. (Powodem, dla którego ustawiłem to na względne, było to, że chciałem, aby był ustawiony w obszarze upuszczania). –

+0

Chcę tej samej funkcjonalności, ale opcja 'droppable' powinna również obsługiwać opcję "sortable", ale z niektórymi problemami tutaj http://jsfiddle.net/6J3AB/. Jakieś sugestie? – Ashok

1

jeden problem miałam mając element przeciągalny, który jest zbyt szeroki, aby mógł zostać zrzucony na element zrzucany, jeśli opcja tolerancji ma domyślną wartość "przecięcia".

"Przecięcie" oznacza, że ​​przeciągnięcie można zrzucić, gdy jego 50% znajduje się nad zrzucanym. A to niemożliwe, jeśli jest ponad dwa razy szersze.

Moje draggables miały wartość zmiennej, więc ich szerokość była zmienna i czy można je było zmieniać również. Zamiast tego użyłem "wskaźnika" i przechodzi tam, gdzie znajduje się mysz.