2008-10-13 8 views
33

J'utilise la bibliothèque jQuery pour implémenter le glisser-déposer.jQuery glisser-déposer - comment obtenir l'élément en train d'être déplacé

Comment obtenir l'élément qui est déplacé lorsqu'il est déposé?

Je veux obtenir l'identifiant de l'image dans la div. L'élément suivant est traîné:

<div class="block"> 
    <asp:Image ID="Image9" AlternateText="10/12/2008 - Retina" Width=81 Height=84 ImageUrl="~/uploads/ImageModifier/retina.jpg" runat=server /> 
</div> 

J'ai la fonction standard est passé de leur exemple:

$(".drop").droppable({ 
       accept: ".block", 
       activeClass: 'droppable-active', 
       hoverClass: 'droppable-hover', 
       drop: function(ev, ui) { } 
}); 

J'ai essayé différents ui.id etc., qui ne semble pas fonctionner.

+1

s'il vous plaît noter que 'ui.draggable' est pas pris en charge anynore. utilisez '$ (data.helper) .attr ('ppp')' à la place. –

Répondre

36

N'est-ce pas le ui.draggable?

Si vous allez ici (dans Firefox et en supposant que vous avez Firebug) et regardez dans la console Firebug Vous verrez que je fais un console.dir de l'objet ui.draggable qui est le div traîné

http://jsbin.com/ixizi

Par conséquent, le code dont vous avez besoin dans la fonction de chute est

 drop: function(ev, ui) { 
       //to get the id 
       //ui.draggable.attr('id') or ui.draggable.get(0).id or ui.draggable[0].id 
       console.dir(ui.draggable) 
     } 
+0

Merci - La console n'est pas définie dans firebug? – alexmac

+0

alexmac - remplace le fichier console.dir par un débogueur; Vous pouvez ensuite afficher la propriété ui.draggable dans la fenêtre de surveillance. Je ne sais pas pourquoi il est dit non défini. Quelle version de FB et FF? La méthode dir est standard pour FB voir http://getfirebug.com/console.html – redsquare

+0

Juste avant la console, vous avez besoin de window.loadFirebugConsole(); pour que la console fonctionne. – MDCore

3

redquare est juste, à l'intérieur de votre fonction reportez-vous à ui.draggable:

$(".drop").droppable({ accept: ".block", 
         activeClass: 'droppable-active', 
         hoverClass: 'droppable-hover', 
         drop: function(ev, ui) { 
          //do something with ui.draggable here 
         } 
}); 

Cette propriété pointe vers la chose en train d'être déplacée.

Notez que si vous utilisez des "assistants" clonés, le fichier déplaçable sera la copie clonée et non l'original.

+0

ui.draggable est un objet mais je ne semble pas être en mesure d'obtenir la div qui est le draggable élément. ui.draggable.id ou ui.draggable.innerHTML ne fonctionne pas. – alexmac

+2

ui.draggable.attr ('id') ou ui.draggable.get (0) .id – redsquare

13
$(ui.draggable).attr("id")  

...

+0

+1 pour BullsEye! –

13

Le ui.draggable() ne semble pas fonctionner plus. Pour obtenir l'identifiant, on peut utiliser

$(event.target).attr("id"); 
+1

Ne récupère-t-il pas l'identifiant de l'élément sur lequel nous déposons des éléments? –

+0

vous avez raison mais mieux: '$ (data.helper) .attr ('ppp')' –

+1

$ (event.target) fonctionne très bien, surtout quand vous avez besoin de l'élément et que vous utilisez draggable et redimensionnable en même temps. – Webars

2

je suis

drop: function(event, ui) {alert(ui.draggable.attr("productid"));} 
5

J'ai essayé la plupart de ce qui précède, mais à la fin seulement

event.target.id 

a fonctionné pour moi.

6

RÉPONSE QUI FONCTIONNE EN 2017

Beaucoup de temps est passé à côté, et je l'ai trouvé que la réponse acceptée actuelle ne fonctionne plus.

Une solution qui fonctionne actuellement:

$('#someDraggableGroup').draggable({ 
       helper: 'clone', 
       start: function(event, ui) { 
        console.log(ui.helper.context) 
        console.log(ui.helper.clone()) 
       } 
      }) 

Ici, ui.helper.context fait référence à l'objet d'origine que vous essayez de faire glisser, et clone() se réfère à la version clonée.

EDIT

Le voir ci-dessus est trop quel objet vous faites glisser en utilisant la fonction draggable(). Pour détecter quel objet draggable a été abandonné dans un droppable(), les travaux suivants:

$('#myDroppable').droppable({ 
    drop: function(event, ui){ 
     console.log(ui.draggable.context) 
       OR 
     console.log(ui.draggable.clone()) 
    } 
})