Перетаскивание перетаскиваемым программно и запуск триггера
Как и в моей скрипке 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
цикл эта функция обратного вызова запускается несколько раз.