Проверьте, содержит ли dropppable другой перетаскиваемый элемент (jQuery UI) - PullRequest
2 голосов
/ 06 января 2012

У меня есть сбрасываемый элемент div, который исчезает, когда с него перетаскивается перетаскиваемый элемент.Это прекрасно работает, используя событие Out.Проблема, которую я получаю, состоит в том, когда на буксируемом элементе есть два перетаскиваемых элемента.Пропадающий элемент все равно исчезнет, ​​когда я перетяну его.Как я могу проверить, есть ли уже другой перетаскиваемый элемент в этом элементе, так что я могу отменить эффект затухания.Я хочу, чтобы выпадающий элемент исчезал, только когда последний перетаскиваемый элемент снят.

$(".droppable-element").droppable({
    tolerance: 'touch',
    out:function(event,ui){

       /*Need to first check if there is another draggable element in the droppable before fading out.*/
            $(this).fadeOut('slow', function(){
                // Animation complete.

             });                
 }
});

1 Ответ

2 голосов
/ 06 января 2012

Являются ли перетаскиваемые элементы потомками (потомками) предмета? И удаляются ли они от него, когда их тянут? В этом случае вы можете сделать что-то вроде этого:

if ( $(this).find(".draggable-element").length == 0 )
    $(this).fadeOut('slow', function(){

Обновление : если я правильно понимаю, вы перетащили элемент в пипетку (может быть, упали?), Затем перетянули другой и удалили его. В этом случае вы можете отслеживать, какие (или, по крайней мере, сколько) перетаскиваемые объекты прошли над вашей пометкой, но не исчезли.

$(".droppable-element").droppable({
    tolerance: 'touch',
    over:function(event,ui) {
        var howMany = $(this).data("howMany") || 0;
        $(this).data("howMany", howMany+1);
    },
    out:function(event,ui){
        var howMany = $(this).data("howMany") || 1;
        $(this).data("howMany", howMany-1);
        if ( howMany == 1 )
            $(this).fadeOut('slow', function(){
                // Animation complete.
            });
    }
});
...