2016-12-27 8 views
0

Я добавил еще один div для внешних событий в моей реализации FullCalendar, и идея состоит в том, чтобы этот div сохранял избранное для последующего использования, если пользователь хочет (визуально проиллюстрировать идею ->http://imgur.com/a/qZbWj). Им успешно возможность перетаскивать события с первого дел до второй, и я также смог перетащить их из div2, но НЕ на календарь по некоторым причинам:Почему jQuery clone делает события не перетаскиваемыми в календарь? fullcalendar

// 2nd div droppable setting 
$('#external-events-fav').droppable({ 
     accept: '#external-events .fc-event', 
     drop: function (event, ui) { 
      var droppable = $(this); 
      var clone = ui.draggable.clone(); 
      clone.draggable({ // clone element then make it draggable 
       helper: 'clone', 
       appendTo: 'body', 
       scroll: false, 
       zIndex: 999, 
       revert: true,  // will cause the event to go back to its 
       revertDuration: 0 
      }).appendTo(droppable); 
     } 
    }); 

Если я не сделать пользовательский интерфейс .draggable.clone(), я могу перетащить событие из нового div в календарь, но я хочу сделать клон, поэтому я могу показать событие в обоих div. Создание клона с использованием jQuery clone() делает его недоступным для календаря, но по неизвестным причинам. Кто-нибудь знает, почему? Я пробовал клонировать (true) и clone (true, true), но это тоже не помогло.

скрипку: http://jsfiddle.net/a3q9c5tr/37

все еще нужна помощь с этим :(

+0

Делает это 'undraggable' или' undroppable' в календаре? –

+0

'ui.draggable' - это функция, то почему' .clone() '? – PHPglue

+0

Я не могу отбросить его на календарь, он не будет вставляться, если я позвоню .clone() – jones

ответ

0

Я нашел решение проблемы. Функция jquery clone() не копирует атрибуты данных, установленные данными jQuery (функция «event», {}), поэтому мне пришлось сделать это снова для клона, чтобы он работал, поэтому:

$('#external-events-fav').droppable({ 
    accept: '#external-events .fc-event', 
    drop: function (event, ui) { 
     var droppable = $(this); 
     var clone = ui.draggable.clone(); 
     clone.data('event' { 
      title : ui.draggable.attr("name"), 
      // INSERT MORE ATTR HERE 
     }); 
     clone.data('duration',ui.draggable.attr('duration')); 
     clone.draggable({ // clone element then make it draggable 
      helper: 'clone', 
      appendTo: 'body', 
      scroll: false, 
      zIndex: 999, 
      revert: true,  // will cause the event to go back to its 
      revertDuration: 0 
     }).appendTo(droppable); 
    } 
}); 

Надеюсь, это может помочь кому угодно;)

0

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

Клонированный объект перетаскиваемым (вы можете нажмите и перетащите его по своей странице ), но не отбрасывайте его в календарь (когда вы поднимаете палец по календарю, объект возвращается в исходное положение или просто не записывается как падение PED).

Если это так, мое первое предположение это, что клонированный объект не соответствует селектору droppableaccept. Является ли ваш клонированный объект внутри #external-events и имеет ли он класс fc-event?

Если это так, вы, вероятно, должны добавить его в нужное место DOM перед вызовом функции draggable. Попробуйте следующее:

$('#external-events-fav').droppable({ 
    accept: '#external-events .fc-event', 
    drop: function (event, ui) { 
     var clone = ui.draggable.clone(); 
     clone.appendTo(this); 
     clone.draggable({ // clone element then make it draggable 
      helper: 'clone', 
      scroll: false, 
      zIndex: 999, 
      revert: true,  // will cause the event to go back to its 
      revertDuration: 0 
     }); 
    } 
}); 
+0

Описание проблемы, которую вы опубликовали, является правильным и да, она возвращается к исходной позиции, когда я пытаюсь ее поместить в календарь. Копия создается, когда я перетаскиваю элемент из div1 в div2, и поэтому он находится внутри 'external-events-fav'. Является ли ваш клонированный объект внутри # внешних событий? ** Нет **. Есть ли у него класс fc-event? ** Да ** console.log на консоли дает: div # 10817.fc-event.ui-draggable.ui-draggable-handle – jones

+0

console.log on console = console.log on clone ** – jones

+0

Если ваш клонированный объект не находится внутри '# external-events', он не будет соответствовать атрибуту' accept' и не будет недоступен для '# external-events-fav '. Что делать, если вы вместо этого используете 'accept: '.fc-event''? Это должно сделать ваш клон также недоступным. Либо это, либо добавьте клон внутри '# external-events'. –