38 votes

jQuery drag and drop - comment accéder à l'élément en cours de déplacement ?

J'utilise la bibliothèque jQuery pour mettre en œuvre la fonction glisser-déposer.

Comment accéder à l'élément qui est traîné lorsqu'il est déposé ?

Je veux obtenir l'id de l'image à l'intérieur du 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 abandonnée de leur exemple :

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

J'ai essayé plusieurs ui.id etc., ce qui ne semble pas fonctionner.

1 votes

Veuillez noter que ui.draggable n'est plus supporté. Utilisez $(data.helper).attr('ppp') à la place.

41voto

redsquare Points 47518

N'est-ce pas l'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 la div en cours de déplacement.

http://jsbin.com/ixizi

Par conséquent, le code dont vous avez besoin dans la fonction de dépôt est le suivant

       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 votes

Alexmac - remplacez console.dir par une déclaration debugger ;, vous pouvez alors voir la propriété ui.draggable dans la fenêtre de surveillance. Je ne sais pas pourquoi il est dit que ce n'est pas défini. Quelle version de FB et FF ? La méthode dir est standard pour FB voir getfirebug.com/console.html

0 votes

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

0 votes

@MDCore - Je n'ai jamais utilisé ou vu cela et je n'ai jamais eu de problèmes moi-même. Je suppose que c'est lorsque FB est désactivé et que vous devez l'activer. Je suppose que tous les développeurs web l'ont activé.

13voto

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

...

12voto

karvonen Points 441

La fonction ui.draggable() ne semble plus fonctionner. Pour obtenir l'id, on peut utiliser

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

1 votes

Ne récupère-t-il pas l'identifiant de l'élément sur lequel on dépose les éléments ?

1 votes

$(event.target) fonctionne très bien, surtout lorsque vous avez besoin de récupérer l'élément et que vous utilisez draggable et resizable en même temps.

0 votes

Cela fonctionne parfaitement, et c'est la première fois que je vois ce nom à la place de ui.draggable, qui ne fonctionne plus. Merci !

7voto

Maurits Moeys Points 350

RÉPONSE QUI FONCTIONNE EN 2017

Beaucoup de temps a passé, et j'ai constaté que la réponse acceptée actuellement 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 original que vous essayez de faire glisser, et clone() fait référence à la version clonée.

EDITAR

Ce qui précède permet de voir quel objet vous faites glisser en utilisant la fonction draggable() fonction. Pour détecter ce que draggable a été déposé dans un droppable() les travaux suivants :

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

6voto

Daniel Mlodecki Points 41

J'ai essayé la plupart des solutions ci-dessus, mais à la fin seulement

event.target.id

a fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X