jQuery UI - Droppable只接受一个draggable

Emi*_*mov 8 jquery jquery-ui

我正在制作一个应用程序,即使用一个droppable div和一些draggable divs.如何使dropable不接受多个draggable div?我用谷歌搜索,但没有找到任何解决方法.


脑海中浮现出一种解决方法.我如何检查这个可丢弃的div中是否有丢弃的元素?如果它正忙,则恢复这个可拖动的,这是试图被丢弃

Lik*_*d_T 26

OK为此找到了一个很好的解决方案,主要是'drop'我将droppable设置为只接受已拖入其中的项目.

当您"禁用"时,您需要重新初始化的"输出"事件不再可用,因此我只是切换了符合条件的项目.

然后我可以使用OUT事件重新接受所有可拖动的项目,因为没有其他任何接受,OUT将不会被其他可拖动项触发:

$(".drop-zone").droppable({
    drop: function(event, ui) { 
        $(this).droppable('option', 'accept', ui.draggable);
    },
    out: function(event, ui){
        $(this).droppable('option', 'accept', '.drag-item');
        }   
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,如果可拖动元素恢复为.drop-zone,则会中断 - 例如,用户将元素放在无效区域上. (9认同)

Nic*_*ver 6

您可以.droppable()在第一个之后销毁小部件drop,如下所示:

$(".droppable").droppable({
    drop: function( event, ui ) {
        $(this).droppable("destroy");
    }
});
Run Code Online (Sandbox Code Playgroud)

您可以在这里试用一个演示.

  • @Emil - 如果你需要重新启用它,你可以使用`"disable"`然后`"启用"`以后代替``destroy"` (2认同)

小智 5

我花了很多时间来弄清楚它,最后它对我来说是这样的:

$( ".drop-zone" ).droppable({
    classes: {
        "ui-droppable-active": "ui-state-active",
        "ui-droppable-hover": "ui-state-hover"
    },
    accept: function( draggable ){
        if (!$(this).hasClass('dropped') || draggable.hasClass('dropped')){
            return true;
        }
        return false;
    },
    drop: function( event, ui ) {
        $(this).addClass('dropped');
        ui.draggable.addClass('dropped');
    },
    out: function( event, ui ){
        $(this).removeClass('dropped');
        ui.draggable.removeClass('dropped');
    }
});
Run Code Online (Sandbox Code Playgroud)