2010-07-06 6 views
14

J'ai un largable avec un gestionnaire d'événements drop:Comment déclencher l'événement Drop avec jQuery UI Droppable sans réellement glisser-déposer?

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

J'ai un draggable:

$(this).draggable(); 

Ce que je veux faire est de déclencher le gestionnaire d'événements de chute sur la largable sans réellement faire glisser et déposer le draggable. Je veux simuler le comportement réel sans physiquement effectuer le comportement.

Je pensais que quelque chose comme ça ferait:

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

Malheureusement, ce n'est pas tout à fait aussi simple que cela. Est-ce que quelqu'un sait comment je peux accomplir cela?

+0

http://stackoverflow.com/a/29284621/278405?programmatically- drag-and-drop-element-on-another-element – cychoi

Répondre

11

Vous devez déplacer le code dans votre gestionnaire drop vers une fonction distincte.
Vous pouvez ensuite appeler la fonction à la fois dans le gestionnaire et ailleurs.

+1

Ce qui précède est un exemple de code simplifié pour illustrer ce que je veux accomplir, pas * le * code. Quoi qu'il en soit, comment cela résoudrait-il mon problème? – Kappers

+0

Vous pouvez appeler la fonction au lieu de déclencher l'événement. – SLaks

+3

http://snipplr.com/view/24431/ Ceci est un exemple de ce que pourrait signifier @Slaks. =) – Roylee

9

Vous pouvez déclencher la fonction associée à l'appel de la goutte par méthode d'option:

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

De cette façon, vous obtenez tout ce qui se passerait quand laisser tomber quelque chose sur largable. Bien sûr, vous pourriez simplement exécuter la fonction au lieu de l'assigner. C'est néanmoins une bonne idée d'assigner une fonction à déposer, que vous définissez ailleurs, juste pour des raisons de clarté.

+2

+1 pour pouvoir appeler en dehors de la portée de la définition de fonction d'origine (par exemple) pendant un test QUnit. – StuperUser

+4

La nouvelle syntaxe est: $ ("# droppable"). Droppable ('option', 'drop'). – StuperUser

+0

@StuperUser je ne comprends pas. comment $ ("# droppable") sait quel élément a été déplacé et déposé dessus? – adardesign

1

Comme l'a par StuperUser et fonction de la réponse de ajmurmann, avec les versions récentes de jQuery vous devez faire:

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