Как я могу вызвать событие Drop с jQuery UI Droppable без фактического перетаскивания?

У меня есть droppable с обработчиком событий drop:

$(this).droppable({
  drop:function(){
    console.log('OMG You Dropped It!');
  }
});

У меня есть перетаскиваемый:

$(this).draggable();

Что я хочу сделать, это запустить обработчик события drop на droppable, не перетаскивая перетаскиваемый. Я хочу имитировать фактическое поведение без физического выполнения поведения.

Я подумал, что что-то вроде этого:

$(droppable).trigger('drop', [draggable]);

К сожалению, это не совсем так просто. Кто-нибудь знает, как я могу это сделать?

Ответы

Ответ 1

Вы должны переместить код в своем обработчике drop на отдельную функцию.
Затем вы можете вызвать функцию как в обработчике, так и в другом месте.

Ответ 2

Вы можете вызвать функцию, связанную с вызовом drop путем метода option:

$("#droppable").droppable({
        drop: function(event, ui) {
            do stuff }
    });
var drop_function = $("#droppable").droppable.option('drop');
drop_function();

Таким образом вы получите все, что произойдет, если вы сбросите что-нибудь на droppable. Конечно, вы можете просто выполнить функцию, а не назначать ее. Тем не менее, хорошая идея назначить функцию для удаления, которую вы определяете где-то еще, только ради ясности.

Ответ 3

Как указано StuperUser и на основе ответа ajmurmann, с последними версиями jQuery вы должны сделать:

$("#droppable").droppable({
    drop: function(event, ui) {
        do stuff }
});
var drop_function = $("#droppable").droppable('option', 'drop');
drop_function();