jQuery faites glisser et déposez - la vérification d'une baisse de l'extérieur d'un droppable
Toutes mes excuses si cela a été répondu à une autre question, je ne pouvais pas trouver une réponse spécifique à mon problème!
Je suis en train de tester si un jQuery déplaçable est abandonné à l'extérieur de une juridique droppable. Cela devrait normalement être résolu 90% du temps en revenant de selection, mais je ne veux pas le faire. Au lieu de cela, je veux faire une chose si le déplaçable est tombé sur un drop (fonctionne très bien!), et quelque chose d'autre s'il est abandonné à l'extérieur de toutes les droppables (actuellement de mettre le meilleur de moi-même!).
En un mot:
jQuery('#droppable').droppable(
{
accept: '#draggable',
drop: function(event, ui)
{
//awesome code that works and handles successful drops...
}
});
jQuery('#draggable').draggable(
{
revert: false,
stop: function()
{
//need some way to check to see if this draggable has been dropped
//successfully or not on an appropriate droppable...
//I wish I could comment out my headache here like this too...
}
});
J'ai l'impression que je suis absent quelque chose de vraiment évident...merci d'avance pour toute aide!
Vous devez vous connecter pour publier un commentaire.
Parce que le drop, drop événement se déclenche avant de selection de l'événement d'arrêt, je pense que vous pouvez définir un indicateur sur l'élément glissé dans la liste d'événements de la sorte:
ui.draggable.data('dropped', true);
(ligne 6) en fait êtreui.helper.data('dropped', true);
?Je vois que vous avez déjà eu une réponse, et de toute façon j'ai eu ce même problème aujourd'hui et je l'ai résolu de cette façon:
J'en avais besoin parce que je ne pouvais pas modifier les options de mon draggables, j'ai donc dû travailler uniquement avec les droppables (j'en avais besoin à l'intérieur de l'impressionnant FullCalendar plugin).
Je suppose qu'il pourrait avoir quelques problèmes à l'aide de la "gourmand" option de les droppables, mais il devrait fonctionner dans la plupart des cas.
PS: désolé pour mon mauvais anglais.
EDIT: Comme suggéré, j'ai créé la version à l'aide de jQuery.de données; il peut être trouvé ici : jsfiddle.net/Polmonite/WZma9/
De toute façon jQuery.la documentation des données de dire:
(ce qui signifie qu'il ne fonctionne pas sur IE avant le 8)
EDIT 2: Comme le fait remarquer @Darin Peterson , le code précédent ne fonctionne pas avec plus d'une goutte de la zone, ce qui devrait résoudre ce problème: http://jsfiddle.net/Polmonite/XJCmM/
EDIT 3: Exemple de MODIFIER 2 a un bug. Si je fais glisser un "Glisser-moi!" à bas droppable, puis déposer par "Glisser-moi aussi" à la partie supérieure du drop, puis déposer "Glisser moi aussi" à l'extérieur, il alerte "est Tombée à l'intérieur!" Donc, ne l'utilisez pas.
EDIT 4: Comme indiqué par @Alex Gor, l'exemple de Modifier 2 était faux; en fait, c'était plus un exemple pour expliquer comment faire une boucle par tous les draggables/les droppables, mais j'ai effectivement oublié de supprimer les messages d'alerte, de sorte qu'il était assez déroutant. Ici la mise à jour du violon.
$("#droppable").data("outside", true);
à "transporter" l'état de la variable de manière plus élégante? Solution sympa quand même!! Je vous remercie pour votre participation! 🙂Essayez d'utiliser l'événement "out" d'un droppable élément.
C'est le la documentation
"Cet événement est déclenché lorsqu'un acceptées déplaçable est traîné (dans la tolérance) de ce droppable."
Si je ne me trompe pas, c'est ce que vous avez besoin.
Il est également possible de créer un élément de superposition sur l'ensemble de la page. Si l'élément est supprimé, il vous le feu de votre événement. Pas le meilleur, mais je pense que la seule façon de le faire. Parce que vous avez besoin de quelques autres "drop" pour le feu de ces événements.
L'avantage de l'exemple suivant, c'est que vous n'avez pas besoin de changer ou de connaître la droppable code:
De selection de revenir propriété peut avoir une fonction(valeur){}. Une valeur est passée en argument, en indiquant si l'aide a été de tomber sur un élément (la chute de l'élément), ou 'false' si pas de tomber sur un élément (baisse de l'extérieur et n'est pas acceptée).
Ma conjecture est que vous pouvez ajouter actuel de l'interface utilisateur de l'aide pour déplaçable conteneur avec des données de propriété lors de l'événement de démarrage. Puis le ramasser dans le revert de la fonction de la propriété data. Puis ajouter une propriété à l'aide, en indiquant s'il est tombé ou pas. Puis, finalement, dans l'événement d'arrêt, vérifier ces données, la valeur de la propriété, et de faire ce que vous avez prévu.
Afin d'événement/les appels de fonction pour déplaçable:
start-revenir-stop
Ce qui pourrait être un exemple:
Vous pouvez même retourner la valeur true dans le revert de la fonction, et il suffit de retirer le helper au cours de l'événement d'arrêt au lieu de cela, selon les données de('abandonné') de la valeur avec de l'interface utilisateur.helper.supprimer(). Ou vous pouvez même exploser avec CSS3 si vous avez encore une mauvaise journée 😉
- Je ajouter de la solution que j'ai adopté comme vous pouvez le comprendre très facilement à partir de l'classes css de l'objet que vous êtes en mouvement:
Une vieille question, et le vieux répond à dire que cette "pourraient" être une nouvelle solution. Vous avez peut-être aussi voulu, que la question des états, de savoir SI un bien a été abandonné à l'extérieur d'un drop. Pour moi, dans au moins 95% des cas, je n'ai pas vraiment soin SI, tout simplement je veux que les choses vont revenir à la façon dont ils ont été sans d'éventuelles modifications LORSQUE cela se produit.
Réglage
revert
de la chaîneinvalid
accomplit le comportement désiré sans aucun code supplémentaire ou funky choses à faire.De nouveau, ça ne vous dit pas "s'il a été abandonné à l'extérieur d'un droppable," mais il faudra revenir à l'état initial si cela arrive.