Jquery Draggable - Как создать новый перетаскиваемый div на лету, который затем можно перетаскивать? - PullRequest
8 голосов
/ 18 декабря 2009

Я создаю ежедневник, используя jquery, перетаскиваемый и сбрасываемый.

Когда задание перетаскивается из неназначенного столбца в часовой интервал, оригинальный перетаскиваемый элемент удаляется, и на страницу помещается новый элемент div с подробными сведениями о задании.

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

Только когда они создаются на лету с использованием javascript, происходит что-то, что не дает им перетаскиваться.

Когда я создаю эти новые теги div на лету с помощью Javascript, нужно ли мне что-то сделать, чтобы сообщить jquery, что эти новые элементы предназначены для перетаскивания?

(заранее спасибо как всегда)

Steps

  • У нас есть контейнер div со списком заданий (больше div) внутри. #unassignedjobs - родительский div для этих заданий, со следующими заданиями внутри: #jobN, # jobN2, # jobN3
  • У нас есть еще одна область, в которую мы можем поместить эти элементы, и внутри этой области находится контейнер для отображения заданий для каждого человека, давайте назовем эти # person1 и # person2.
  • Цель состоит в том, чтобы перетащить работу из неназначенного списка вакансий и поместить его в списки рабочих мест
  • В тот момент, когда я это делаю, я обновляю весь html внутри # person1, когда элемент отбрасывается, и с помощью ajax / php переделываю список заданий для этого человека (# person1) и снова заполните # person1, используя innerHTML .
  • Каждый раз, когда страница создается из php, любые задания внутри # person1 присутствуют, когда jquery активирован, что делает их перетаскиваемыми. Только когда выполняется обновление и повторное заполнение innerHTML, элементы (#jobN или # jobN2) не могут быть перетащены

    var createContent = httpRequest.responseText;

    jobcolp.innerHTML = creationContent;

Надеюсь, это немного прояснит проблему.

Ответы [ 2 ]

4 голосов
/ 18 декабря 2009

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

 // remove, reposition, reapply handlers
 $('#jobN').remove().appendTo('#dayViewN').draggable();

или

 // reposition, retain handlers
 $('#jobN').appendTo('#dayViewN');
2 голосов
/ 18 декабря 2009

Вместо того, чтобы заменить новый div, почему бы не отключить перетаскивание?

$(element).draggable('disable');

Тогда, если вы хотите, чтобы он был перетаскиваемым, используйте это

$(element).draggable('enable');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...