可放置区域中的jQuery可放置区域

时间:2015-06-22 13:21:43

标签: javascript jquery jquery-ui jquery-ui-droppable

我有一个名为<ul class="droppable">的可放置无序列表。在无序列表中,我动态生成了名为<li class="placeholder"></li>的列表项,它们也是可放置的。

在占位符之间删除可拖动项时,一切正常。但是当在<li class="placeholder"></li>本身上删除可拖动项目时,可拖动项目会附加到占位符和无序列表。

所以我得到了它的双重克隆。

Here's a jsfiddle有一个可视化的例子。我知道在我的网页上获得双重克隆是合乎逻辑的,但我不知道如何禁用它...

非常感谢任何帮助!

更新:如果您将可拖动项目垂直拖动到可放置元素上,它们会自动追加?怎么可能?

2 个答案:

答案 0 :(得分:2)

您可以尝试解决此问题的一种方法是将所有行为移至sortable并仅使用droppable进行切换以确定所需的行为。这样,您可以在一个地方处理所有内容,这可以解决在同一元素上同时使用sortabledroppable的一些不良影响。像这样:

在您的droppable中,您可以设置overout上的开关,并设置所需的对象。

 $("li.placeholder").droppable({

                accept: "li.to-drag",
                hoverClass: "correct",
                activeClass: "active",
                revert: false,
                tolerance: "pointer",
                over: function (e, ui) {
                   curDrag = ui.draggable;
                   curTarget = e.target;
                                        curThis = $(this);
                    overSortable = true;
                },
                out: function (e, ui) {
                    overSortable = false;
                },

                drop: function (event, ui) {

                }

            });

然后,在beforeStop的{​​{1}}事件中,检查变量sortable是否为真,并在那里设置行为。所有引用ui.draggable,this和event.target的内容都需要由您在droppable中设置的对象替换。事件更好的方法是使函数处理所有这些行为并将它们作为参数传递。

overSortable

还有一些调整,还不完全清楚究竟应该发生什么以及什么时候发生,但这可以使工作变得更容易,而不是试图管理在删除元素时触发的多个事件,你只管理一个。 / p>

http://jsfiddle.net/ts290vth/4/

答案 1 :(得分:1)

管理让它为你工作:

function dropping () {

        $("li.placeholder").droppable({

            accept: "li.to-drag",
            hoverClass: "correct",
            activeClass: "active",
            revert: false,
            tolerance: "pointer",

            drop: function (event, ui) {

                var dragging = ui.draggable.find("img");

                $(this).append(dragging).addClass("dropped");
                $(this).droppable('disable');

                var day = $(ui.draggable).attr('data-id');
                var index = $(event.target).index();

                $(this).attr("data-id", day);
                $(this).attr("date-order", index);
                $(this).addClass("drop-"+ index);
                $(this).attr("data-content", "");

注意: var dragging = ui.draggable.find("img");此行在拖放时让您重复复制,因此您只需删除clone();即可。

它在dest。

创建了拖动项目的克隆

现在请注意:

$("#dropzone").droppable({

        accept: "li.to-drag",
        revert: false,
        tolerance: "pointer",

        drop: function (event, ui) {

            $(this).append(dragging);
            //$("li.to-drag").addClass("placeholder");
            $(this).droppable('disable');

        }

    });

}

占位符类的某些东西会给你带来麻烦。

希望这会有所帮助。