首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可排序附加到错误目标

可排序附加到错误目标
EN

Stack Overflow用户
提问于 2014-06-13 07:49:02
回答 2查看 831关注 0票数 4

我有一个可排序的元素,其子女也是可排序的。

这里有一个JSFiddle,演示了到目前为止我得到了什么。

在下面的小提琴或图片中,蓝色区域是#container,白色框是.child,其中一组带有黑色边框的是.parent

#container.parent是可排序的。

如果一个项目从一个.parent拖放到另一个.parent中,我只需追加该项(jQuery ui自动完成此操作)。如果一个项目(.child)被放置到#container中,我将其包装在.parent div中,以将其标记为新的父级。

现在,单击prod3,选择它,将其拖到prod5的左侧,直到占位符出现在prod5的左侧。在仍然将占位符拖到prod3的左侧时,尽可能地将prod5向下拖放,然后删除它。

如果jQuery UI检测到它是.parent of prod5中的一个下降,那么预期的结果应该如下所示:

如果检测到#container下降,则预期结果应如下所示:

现在正在发生的事情(从控制台中的日志中可以看出):在#container上触发一个接收事件,即使占位符在.parent中。我可以接受这一点--但问题是,即使receive事件是在#container上触发的,拖动的项prod3被附加到.parent,并且.parent上没有触发任何接收事件!

因此,由于这种奇怪的行为,因为接收事件是在#container上触发的,所以项目被包装在一个.parent div中,但是它随后被附加到包含prod5的.parent中。因此,我在.parent div中得到一个.parent div,如下图所示,这是不应该发生的。

有人知道为什么会发生这种事吗?或者有人能建议一种更好的方法(可排序容器中的可排序项)?

附带注意:这是一个角落情况,您可能需要尝试几次才能重现这个场景。

更新:根据这个小型演示,这似乎是jquery的一个bug,我报告了这里。一个临时的解决办法是手动处理#container的接收事件中的情况,就像在这个回答中一样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-16 13:48:08

解决办法很容易

您需要添加以下条件:

代码语言:javascript
复制
if (!ui.item.parent().hasClass('parent')){
     ui.item.wrap(parent).before(helper); 
}

我发现只有当items父类有类.parent时才会出现额外的.parent .ui-sortable div,如果它只有.ui-sortable类,那么它完全可以工作。因此,只需添加此条件,所有条件都可以正常工作。

小提琴

票数 0
EN

Stack Overflow用户

发布于 2014-06-17 15:10:29

好吧,看来.parent认为.child在不存在的时候还在里面。一个边框更大的测试显示,当指针在边距之外,低于.parent时,预期的行为是父母应该崩溃,#container应该接受.child。只有当您在.child的一半宽度之后将其向下拖动时,这种情况才会发生,如果将其拖到前一个.child上并返回到正常位置,则会完全消失。

这就是为什么#container接收drop事件--它发生在容器中!

我的版本 of your JSFiddle中,您可以通过将.child移动到另一个.child上,然后向下移动,直到低于黑色边缘,从而复制bug。请注意,父(黑匣子)不会收缩,即使其子框在外面。

这种行为在较高版本的JQuery UI中得到了部分修正。

使用JQuery 2.0.2和JQuery UI 1.10.3,它是完全固定的。很有可能这是个bug。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24200248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档