javascript - 仅当可放置 div 中没有子项时如何拖放?

标签 javascript jquery html jquery-ui

好吧,我还没有找到解决方案。 I found this answer如果可放置插槽中已经有可拖动元素,这有助于拒绝放置,但我无法使该插槽在清空后重新开始接受子元素。此外,它不适用于可拖动 block 的初始状态(请注意,如果它是其子项的初始状态,您可以在插槽中堆叠多个 block )。

Here is the link to the project

这是具体的代码:

jQuery(window).on("load",function() //if document has loaded
{
//Code to be executed when the document loads here
$( ".b-piece" ).draggable({ cursor: "move", revert: "invalid"});
$( ".grid-b .grid-slot" ).droppable({
    accept: ".b-piece",
    drop: function(event, ui) {
    $(this).droppable('option', 'accept', 'none'); /* STOP ACCEPTING OBJECTS */
    $(this).append(ui.draggable); /* MOVE DRAG OBJECT TO NEW PARENT */
    $(this).children(".game-piece").css({"top":"0", "left":"0"}); /* MAKE GAME PIECE SNAP INTO PLACE */
    },
    out: function(event, ui){
    accept: ".b-piece"
    }
    });

});

谢谢!

最佳答案

要重新激活 droppable,您只需修改 draggable 启动时的选项即可。这会导致恢复问题,因此您还应该移动 draggable 的停止事件时禁用 droppable。像这样:

$( ".b-piece" ).draggable({ 
    cursor: "move", 
    revert: "invalid"
    start: function(e, ui){
        ui.helper.parent().droppable('option','accept','.b-piece');
    },
    stop: function(e, ui){
        ui.helper.parent().droppable('option','accept','none');
    }     
});

对于初始状态,在设置droppable后运行它,它应该可以解决问题:

$( ".grid-b:not(:empty) .grid-slot:not(:empty)" ).droppable('option', 'accept', 'none');

关于javascript - 仅当可放置 div 中没有子项时如何拖放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352092/

相关文章:

javascript - 使用正则表达式仅通过 h1 标签拆分带有 html 的字符串

表单中的CSS样式html弹出窗口?

javascript - 如果 Cookie 为 True,如何不显示 Div?

javascript - HTML 按钮在点击时行为异常

javascript - react map 以行渲染

javascript - 将来自 background.js 的数据存储到 vuex 存储中

javascript - 使用 jQuery 隐藏/显示元素

jquery - 如何使用 <asp :button>? 强制关闭 jQuery UI Accordion <DIV>

javascript - 当我点击一张图片时,它会弹出,但我想模糊其余部分

jquery - 缩略图悬停时的新图像