Нужна помощь для повторного включения перетаскивания - PullRequest
1 голос
/ 07 октября 2010

У меня есть перетаскиваемый элемент

$(".element").draggable({
helper: "clone",
revert: 'invalid',
containment: '#parent',
appendTo: '#parent'
});

У меня есть две проблемы:

  1. После удаления этого элемента оригинал автоматически отключается.

  2. Закрывающий тег привязки добавляется к удаленному элементу. При нажатии этой кнопки «Закрыть» исходный элемент должен снова стать перетаскиваемым и должен быть удален из выпадающего «div».

Я написал обработчик для якоря закрытия следующим образом: он удаляет элемент из объекта сброса, но не делает его перетаскиваемым снова

$('.cancel a',ui.helper).click(function()
{
   $(ui.helper).remove();
   $(ui.draggable).draggable('enable');
});

Пожалуйста, помогите. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 18 июля 2012

В ответе на первый вопрос для параметра перетаскиваемого элемента установлено значение false.

    $(".element").draggable({
      helper: "clone",
      revert: 'invalid',
      disabled: false,
      containment: '#parent',
      appendTo: '#parent'
    });

В обработчике для закрытия привязки включите перетаскиваемый объект, который вы хотите перетащить. Например,

    $('.cancel a',ui.helper).click(function()
    {
       $(ui.helper).remove();
       $('#element').draggable('enable');
    });
0 голосов
/ 17 июля 2012

Я сделал аналогичную вещь, когда создал массив для хранения индекса отброшенного перетаскиваемого объекта, например:

var $drop = $(selector for my droppable),
    $drag = $(selector for my draggable),
    dragged = [];
$drop.droppable({
    drop: function (e, ui) {
        var dragIndex = $drag.index(ui.draggable);
        dragged[$drop.index($(this))] = dragIndex;
    }
});

Затем, чтобы повторно включить перетаскиваемый элемент в функции отмены, вы бысделать что-то вроде этого:

$('.cancel a').click(function() {
    var clickIndex = $(selector for droppable).index($(this).parent()),
        whichDrag = dragged[clickIndex];
    $drag.eq(whichDrag).draggable("enable");
});

Я предполагаю, что элемент, возвращаемый $(this).parent(), соответствует элементам в вашем селекторе для отбрасываемого, если нет, вам придется сделать другой обход.

Основная идея состоит в том, чтобы найти индекс перетаскиваемого элемента, сохранить его в массиве dragged в позиции, равной индексу элемента, на который он отброшен.Затем при отмене вы используете индекс элемента, в который было перетащено перетаскиваемое значение, чтобы получить значение из массива dragged, которое соответствует исходной позиции перетаскивания, и затем включить его.

0 голосов
/ 18 мая 2011

Полагаю, вы отключили перетаскивание в событии Drop (?)
$(ui.draggable) все еще находилось в контексте.однако в событии щелчка вы больше не можете получить доступ к перетаскиваемому объекту, и вместо этого вы должны выбрать элемент, который вы хотите перетащить сразу.например: $("#element").draggable("enable")

...