Jquery UI перетаскиваемый: клон, если нажата Ctrl

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

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

Мой код пока отсутствует, только клон на части Ctrl отсутствует:

$(".drag_clone").draggable({helper: "clone"});
$(".draggable").draggable({revert: "invalid"});
$(".droppable").droppable(
    {
        drop: function(event, ui) {
            if (ui.draggable.hasClass("draggable")) {
                ui.draggable.remove();
            }
            $('<div class="draggable"></div>').text(ui.draggable.text()).draggable({revert: "invalid"}).appendTo(this);
        }
    });

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

В коде, который я вставил сюда, я создаю новый элемент, который затем добавляется к droppable. Это прекрасно работает для клонируемых перетаскиваемых объектов, но с не клонируемыми перетаскиваемыми объектами остаются оригинальные перетаскиваемые объекты, поэтому я в итоге продублирую их.

Если вместо этого я просто добавляю перетаскиваемый объект к объекту сброса, перетаскиваемый клон удаляется с исходного места.

Редактировать: но с не клонируемыми перетаскиваемыми оригиналами остаются перетаскиваемые остатки, поэтому я в итоге дублирую их.

Если вместо этого я просто добавляю перетаскиваемый объект к объекту сброса, перетаскиваемый клон удаляется с исходного места.

Редактировать: но с не клонируемыми перетаскиваемыми оригиналами остаются перетаскиваемые остатки, поэтому я в итоге дублирую их.

Если вместо этого я просто добавляю перетаскиваемый объект к объекту сброса, перетаскиваемый клон удаляется с исходного места.

Редактировать: Я обнаружил проблему, я использовал ui.draggable, который ссылается на исходный перетаскиваемый объект, а не ui.helper, который ссылается на клонированный. Я добавляю окончательный рабочий код в качестве ссылки:

$(".drag_clone").draggable({helper: "clone"});
$(".draggable").draggable({revert: "invalid"});
$(".droppable").droppable(
    {
        hoverClass: 'ui-state-hover',
        drop: function(event, ui) {
            ui.helper.remove()
            $('<div class="draggable"></div>').text(ui.draggable.text()).mousedown(function(event) 
                {$(this).draggable('option', {
                         helper : event.ctrlKey ? 'clone' : 'original' });
                         }).draggable({ revert: "invalid" }).appendTo(this);
        }
    });
5
задан Mad Scientist 27 August 2010 в 13:28
поделиться