2010-06-14 8 views
4

J'ai une liste triable. Quand un nouvel élément est déposé dans la liste (à partir d'un objet déplaçable), j'aimerais y accéder pour y effectuer des opérations. Voilà ce que j'ai:démo triable + dragable - comment avoir accès à un objet tombé?

$("#mySortableList").sortable({ 
    receive: function(event, ui) { 
     alert("this is the dropped item: " + ui.item.toString()); 
    } 
}).disableSelection(); 

donc « ui.item » est l'élément qui a été abandonné, mais ce n'est pas l'élément dupliquée qui va maintenant faire partie de ma liste. Comment puis-je avoir accès au nouvel élément qui a été supprimé? J'utilise la démonstration exacte du site jquery-ui ici: http://jqueryui.com/demos/draggable/#sortable

Merci

Répondre

4

Vous pouvez obtenir l'élément en cas stop et vérifier qu'il est venu du draggable (il ne dispose pas d'une poignée ci-joint, il le ferait si elle était du triables), comme ceci:

$("#mySortableList").sortable({ 
    stop: function(event, ui) { 
    //check it wasn't here previously 
    if(!ui.item.data('tag') && !ui.item.data('handle')) { 
     ui.item.data('tag', true); //tag new draggable drops 
     alert("this is the dropped item: " + ui.item.toString()); 
    } 
}).disableSelection(); 

You can see a demo to play/test with here, puisqu'une poignée ne soit pas ajouté, au moins pas d'une manière qui compte, nous les éléments de marquage est passé de le draggable afin qu'ils ne tirent pas l'alerte à nouveau lorsqu'ils sont déplacés à l'intérieur du triable.

+0

Wow c'est génial! Existe-t-il un moyen d'accéder également à l'élément déplacé dans l'événement stop()? On dirait que vous pouvez obtenir l'un ou l'autre, mais pas les deux, par exemple [recevoir => élément déplacé], [arrêt => élément cloné]. J'ai fondamentalement besoin de transférer des données de l'élément déplacé vers l'élément cloné. C'était un bon début, merci. Dans le pire des cas, je suppose que je peux définir un pointeur vers l'élément déplacé dans receive(), puisqu'il est appelé en premier, puis l'utiliser dans stop(). – user246114

0

je retire actuellement l'article reçu comme ceci:

$(this).data().sortable.currentItem.remove(); --now to find its INDEX! 
Questions connexes