5

按照这个例子。

<div id="containers">
    <div class="frame">
        <div class="popup">Popup</div>
        <div class="object">Object 1</div>
        <div class="object">Object 2</div>            
    </div>
</div>

我希望每个对象都可以拖动以弹出。一旦进入弹出窗口,就有可能再次拖动框架

问题是我第二次这样做。当我尝试将可拖动对象拖放到可放置弹出窗口时,什么也没有发生。

有任何想法吗?

这是我的代码。 http://jsfiddle.net/PtLLf/49/

4

1 回答 1

5

原因是默认情况下,当一个元素被放置在嵌套的 droppable 上时,每个 droppable 都会接收到该元素。

因此,在您的情况下,内部的 drop 被触发,但外部 div 也被触发并获取元素本身。

您可以将greedy选项设置为 true,任何父 droppables 都不会收到该元素。drop 事件仍然会正常冒泡,但可以检查 event.target 以查看哪个 droppable 接收到可拖动元素。

参考:http ://api.jqueryui.com/droppable/#option-greedy

代码:

$('#containers .frame .popup').droppable({
    activeClass: "ui-state-default",
    hoverClass: "ui-state-hover",
    accept: '.object',
     greedy: true ,
    drop: function (event, ui) {
        $(ui.draggable).addClass("insidePopup");
        ui.draggable.detach().appendTo($(this));
    }
});

$('#containers .frame').droppable({
    activeClass: "ui-state-default",
    hoverClass: "ui-state-hover",
    accept: '.insidePopup',
    greedy: true ,
    drop: function (event, ui) {
        ui.draggable.detach().appendTo($(this));
        $(ui.draggable).removeClass("insidePopup");
    }
});

$('#containers .frame .object').draggable({
    helper: 'clone',
    containment: "document"
});

演示:http: //jsfiddle.net/IrvinDominin/dVFgn/

于 2013-09-20T11:40:18.763 回答