gpt4 book ai didi

jQuery UI 的贪婪 droppable 无法按预期工作

转载 作者:行者123 更新时间:2023-12-01 01:31:21 26 4
gpt4 key购买 nike

我有一个可拖动对象列表,可以将其放入可放置对象中,当发生这种情况时,可拖动对象将被克隆并转换为可放置对象。

这个新的 droppable 是贪婪的,但是当它们接收到可拖动时,两个放置事件都会被触发(来自可拖动的放置事件和来自可放置区域的放置事件)

我做错了什么?我只需要事件触发一次(从新的 droppable 中)

这是一个fiddle :将一个项目拖放到红色区域,然后将另一个项目拖放到已放置的项目中。查看控制台日志。

HTML

<div id="main_droppable"></div>

<ul>
<li class="item" data-id="1">1</li>
<li class="item" data-id="2">2</li>
<li class="item" data-id="3">3</li>
<li class="item" data-id="4">4</li>
<li class="item" data-id="5">5</li>
</ul>

JS

$(".item").data("active", false);

$(".item").draggable({
helper: "clone",
appendTo: "#main_droppable",
scroll: false,
start: function(event, ui)
{
if($(this).data("active") == false)
{
$(this).fadeTo(100, 0.2);
}
else
{
return false;
}
},
revert: function(is_valid_drop)
{
if(!is_valid_drop)
{
$(this).fadeTo(100, 1).data("active", false);

return true;
}
else
{
$(this).data("active", true);
}
}
});

$("#main_droppable").droppable({
drop: function(event, ui)
{
console.log("drop main");

addNewItem(ui.helper);

return false;
}
});

function addNewItem($oldItem)
{
var $newItem = $oldItem.clone(false).fadeTo(100, 1).data("active", true);

$oldItem.remove();

$newItem.draggable({
containment: "parent",
});

$newItem.droppable({
greedy: true,
drop: function(event, ui)
{
console.log("drop item");

$(this).fadeTo(100, 0, function()
{
var $originalItem = $("ul").find(".item[data-id=" + $(this).data("id") + "]");

$originalItem.fadeTo(100, 1).data("active", false);

$("#main_droppable").find(".item[data-id=" + $originalItem.data("id") + "]").remove();
});

addNewItem(ui.helper);
}
});

$("#main_droppable").append($newItem);
}

CSS

#main_droppable
{
border: 1px solid red;
min-height: 50px;
}

.item
{
display: inline-block;
border: 1px solid blue;
width: 25px;
height: 25px;
}

最佳答案

嗯...它与特定的类有关...

当我放下可拖动对象并克隆它时,ui-draggable-dragging 类保持在原位。因此,为了使其正常工作,我必须将其删除,然后一切都会按预期进行。

我改变这一行:

var $newItem = $oldItem.clone(false).fadeTo(100, 1).data("active", true);

进入这个:

var $newItem = $oldItem.clone(false).fadeTo(100, 1).data("active", true).removeClass("ui-draggable-dragging");

更新了 fiddle :https://jsfiddle.net/3118zjg1/1/

关于jQuery UI 的贪婪 droppable 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com