2010-04-13 3 views
3

J'ai une table html dans laquelle chaque ligne (<tr>) représente un groupe d'ordinateurs clients. Chaque ligne peut être développée pour montrer les clients appartenant au groupe. Les <tr> contenant les clients sont toujours générés mais masqués et affichés lorsque vous cliquez sur le bouton plus au début de chaque ligne.JQuery glisser-déposer de l'interface utilisateur ne remarque pas les changements DOM qui se passe pendant le glisser?

Les clients eux-mêmes (ils sont <div>) peuvent être déplacés et déposés dans un autre groupe tant que ce groupe est déjà développé. Jusqu'à présent, cela fonctionne bien. Ce que j'essaye d'accomplir maintenant est que le client peut être traîné à un groupe s'est effondré et après une seconde ou siant le groupe il sera étendu et le client peut être abandonné parmi les autres clients du groupe.

Je programmé le vol stationnaire à l'aide des in et out événements de la droppable et élargit le groupe tout droit, mais (et maintenant il commence à être difficile à expliquer avec des mots;) le comportement du largable (le client) est encore comme si la ligne de table qui semblaient ne étaient pas là: les inout et drop événements du largable sont tirés sur l'ancienne position des éléments, et les inout et drop événements de la nouvelle apparition <tr> ne sont jamais tiré.

Il semble que JQuery mémorise la position, la taille, etc. des éléments lorsque la traînée commence, et ces valeurs ne sont pas mis à jour s'il y a un changement dans les DOM avant la chute arrive ...

Can Quelqu'un confirme-t-il que ce comportement est normal ou peut-il être causé par un autre problème dans mon propre code? Une solution de contournement?

(la question est tout à fait pléthorique déjà si je ne comprends pas de code mais je téléchargerai volontiers si nécessaire)

Edit: Je ne peux pas ajouter une image depuis que je suis un nouvel utilisateur, mais vous peut trouver un ici: http://img69.imageshack.us/img69/309/20100413190123.png

versions: JQuery est 1.3.2 et jquery-ui est 1.7.2

Répondre

2

Après une bonne nuit de sommeil et d'autres recherches que j'ai trouvé la réponse à ma propre question:

Quand un draggable commence à être dragg ed il calcule les positions de tous les droppables qui peuvent l'accepter. Par défaut, les positions ne sont pas recalculées après cela. Il n'y a actuellement aucune fonction ou callback pour déclencher manuellement le calcul uniquement lorsque cela est nécessaire (dans mon cas: lorsqu'un groupe est activé). développé) mais il s'agit d'une demande de fonctionnalité enregistrée.

Voir: http://groups.google.com/group/jquery-ui/browse_thread/thread/5a1fbb37ab8ef1a9?pli=1 et http://dev.jqueryui.com/ticket/4911

Exemples de worarounds à manuallay recalcule uniquement en cas de besoin: http://forum.jquery.com/topic/how-to-make-draggable-execute-refreshpositions-not-on-every-mousemove-but-with-a-specific-callback et http://trycatchfail.com/blog/post/2010/01/15/Work-around-for-jQuery-UI-Draggable-refresh-limitation.aspx

Questions connexes