Перетаскивание перетаскиваемым программно и запуск триггера

Как и в моей скрипке http://jsfiddle.net/meridius/95Wej/ меня есть некоторые элементы (draggables), которые я хочу программно (просто с помощью кода, без взаимодействия с пользователем) переместить в соответствующие им droppables. Это я могу сделать.

Чего я не знаю, так это того, почему событие.droppable("drop") не запускается.
Мне нужно dropbleable, чтобы зарегистрировать, что он имеет перетаскиваемый на нем. В противном случае (в моей более сложной настройке) происходит некоторое странное поведение, когда пользователь перемещает этот перетаскиваемый объект.

Я пытался .trigger("mousemove"), mousedown, переинициализировать .droppable() после .position(), но ничего из этого не помогло.

РЕДАКТИРОВАТЬ:
"Странное" поведение было вызвано поддержанием position:relative;, который я решил, установив его до абсолютного перед вызовом .position(),
Тем не менее вопрос о том, почему мероприятие не было проведено, остается.

2 ответа

Обработчик события удаления включен droppableЭто немного странно. Если вы инициализируете droppable с обработчиком события для события drop, например:

$('div.droppable').droppable({drop: dropFn});

затем dropFn это единственная функция, которая вызывается, когда элемент сбрасывается на droppable и вы не можете заставить его вызываться, используя только .trigger метод. Вместо этого вам нужно инициализировать droppable без обработчика события для функции удаления, а затем связать обработчик события для события удаления позже так:

$('div.droppable').droppable().on('drop', dropFn);

Инициированные пользователем удаления не будут затронуты, но теперь вы можете инициировать событие удаления в своем коде. Когда вы делаете это, вы должны предоставить замену ui Объект описан здесь примерно так:

$('div.droppable').first().trigger('drop', {draggable: ..., helper: ...});

Я достигаю перемещения draggable к droppable установив положение droppable к "относительному", динамически (используя вызов .css) установив следующий CSS на draggable к следующему:

div.draggable {
    position: absolute;
    left:     0;
    top:      0;
}

А затем отсоединение и добавление draggable к droppable:

$('div.draggable').first().detach().appendTo($('div.droppable').first());

Этот ответ помог мне: /questions/3007636/initsiirovanie-sobyitiya-udaleniya-s-pomoschyu-jquery-droppables/3007646#3007646.

В моих примерах я всегда использовал первое draggable или же droppable но вы должны быть в состоянии приспособить это к вашему конкретному приложению легко.

Это не стрельба, потому что вы не падаете и стихия там. Вы используете .position функция jquery для перемещения перетаскиваемого объекта в dropable. Итак, ваша цель - использовать обратный вызов движущейся функции.

$(this).position({
  of: "." + $(this).data("target")
}, function(){
  //do some stuff
});

Потому что вы внутри .each цикл эта функция обратного вызова запускается несколько раз.

Другие вопросы по тегам