Клонирование Jquery перетаскивается также перетаскивает его оригинал - PullRequest
2 голосов
/ 16 ноября 2011

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

Используя пользовательский интерфейс Jquery, все элементы можно перетаскивать, а некоторые изменять размер.Я хочу, чтобы пользователь мог сделать точную копию элемента, но когда я использую функцию клона, я получаю странные результаты.Я могу перетащить оригинал от клона, но когда я пытаюсь перетащить клон, он просто перетаскивает оригинал и остается на своем месте.

Вот мой код

    function addobject (element_type){
       $('#activitystage').append($("<div class=\"draggable " + element_type + "\" id=\"" + counter + "\"></div>")); 
       $( "#" + counter ).multidraggable({ containment: "#activitystage",  grid: [10, 10],drag: function(event,ui){ showpositions(); }});   
       $('#' + counter).contextMenu({menu: 'functionsMenu'  }, function(action, el, pos) {run(action, el);  });
       $('#' + counter).append("<textarea class=\"" + element_type + "\"></textarea>");
    }

    function run (action, el){
       switch (action){
            case "clone":
              $(el).clone(true).attr('id', 'some new id').appendTo('#activitystage');
              break;
}

1 Ответ

0 голосов
/ 25 октября 2012

Самое простое решение вашей проблемы, о котором я могу подумать, - это просто использовать клон (false) и заново связать событие перетаскивания.

Попробуйте этот код

var attr = { containment: "#activitystage",  grid: [10, 10],drag: function(event,ui){ showpositions(); }};

function addobject (element_type){
    $('#activitystage').append($("<div class=\"draggable " + element_type + "\" id=\"" + counter + "\"></div>")); 
    $( "#" + counter ).multidraggable(attr);   
    $('#' + counter).contextMenu({menu: 'functionsMenu'  }, function(action, el, pos) {run(action, el);  });
    $('#' + counter).append("<textarea class=\"" + element_type + "\"></textarea>");
}

    function run (action, el){
       switch (action){
            case "clone":
              $(el).clone(false).attr('id', 'some new id').appendTo('#activitystage').multidraggable(attr);
              break;
}
...