检查 droppable 是不是已经包含另一个可拖动元素(jQuery UI)

Posted

技术标签:

【中文标题】检查 droppable 是不是已经包含另一个可拖动元素(jQuery UI)【英文标题】:Check if droppable already contains another draggable element (jQuery UI)检查 droppable 是否已经包含另一个可拖动元素(jQuery UI) 【发布时间】:2012-02-03 19:55:24 【问题描述】:

我有一个可拖放的 div 元素,当一个可拖动元素被拖出它时,它会淡出。使用 out 事件可以正常工作。我遇到的问题是当 droppable 上有两个可拖动元素时。当我拖掉一个可放置元素时,它仍然会消失。如何检查 droppable 上是否已经有另一个可拖动元素,以便取消淡入淡出效果。我希望仅当最后一个可拖动元素被取下时,可放置元素才会消失。

$(".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】:

可拖动元素是 droppable 的子元素(后代)吗?当他们被拖走时,他们是否会被移除?在这种情况下,您可以这样做:

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.
            );
    
);

【讨论】:

不,它们是分开的,否则我可以使用 has 选择器

以上是关于检查 droppable 是不是已经包含另一个可拖动元素(jQuery UI)的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 可拖放定位

jQuery UI - Droppable 只接受一个可拖动的

从列表拖放到表 Jquery

jQuery UI droppable:悬停时调整元素大小不起作用

可拖放元素内的可拖放元素

如何获得 .droppable() 的自定义容差效果?