为什么4个盒子中只有1个可以放置,如果它们都应该是?

时间:2011-07-07 10:00:58

标签: jquery css debugging drag-and-drop

在我的sandbox site,如果您加载它,几秒钟后会出现一个下拉菜单,并显示“确认”按钮。如果单击“确认”按钮,背景图像将更改并加载一些新框。新加载页面上的四个小方框是可拖动的,白色方框内的4个方框应该是可放置的,但只有一个是可放置的。

新更新 - 以下是整个代码的工作小提琴。点击小提琴上的“提交”。新箱子加载后,它们都是可拖动和可拖放的。 Working fiddle of whole code

但是,在我的沙盒网站上,只有一个框(第2页的大白框中的红色框)实际上是可以删除的。

重要CLUE - 如果我更改红色框上的CSS位置,则由于某种原因它不再可以删除。例如,我在红色和青柠绿色框上交换了左侧:位置,它从红色框中取走了可放置的功能,因此没有任何框可以放置。

另一个新的更新我在非wordpress网站上重新创建了问题,因此我们知道它不是wordpress问题或wordpress插件问题non-wordpress site。除了这个网站,它不是第二页上的红色框可以放置,只有深蓝色框。

另一个新的更新第一个回复此帖子的人发现,如果从dom中删除了红色框,则浅蓝色框会变得可以删除......

知道怎么解决这个问题吗?另外,您能告诉我如何将console.log添加到此代码中,以便我可以尝试深入挖掘。我从来没有将控制台日志附加到代码......

4 个答案:

答案 0 :(得分:3)

尝试删除每个“可拖动”元素上的margin-left。问题将消失。似乎Jquery UI中可能存在一个错误,它将边距视为元素的一部分。

要考虑已移除的边距,您可以调整已应用于元素的“左”值。

(编辑:它似乎是this bug在这里工作。至少我认为这是一个错误,该票证的作者也是如此;至少它是一个不太直观的库表现通过不处理具有边距的情况的方式)

答案 1 :(得分:0)

在我看来这是一个加载问题。在相关元素位于DOM之前,将调用您的drap / drop脚本。

尝试将拖放代码放在$(document).ready()部分中。代码将一直等到整个页面被加载进行调用,并确保所有元素都存在。

控制台日志是:console.log( STUFF

答案 2 :(得分:0)

这里所有的盒子都可以丢弃。只有,您必须将可拖动的拖放到可丢弃的右侧。然后它会触发。

一定是某种定位问题。

由于它在小提琴上完美无缺,我无法测试解决方案,但如果你以任何方式移动dropables,请尝试将该动作移动到声明它们可拖动/可丢弃的行的“另一侧”。

在任何情况下,可拖动/可丢弃都认为盒子不在某个地方。无论如何,这就是它的样子。

答案 3 :(得分:0)

Jquery droppable通过获取框的左上角和右上角,然后添加宽度和高度来获得矩形。

在css中,页面的左上角是0,0,jquery接受leftOffset和topOffset。

现在您的问题出在CSS的这些行中:

.custom #lime{background: #77FF5C; float: left; width: 20px; height: 20px; margin-left: 50px; display: none; }

当您下降时,margin-left:50px会抛弃您的视觉辅助。拿出来,你会看到jQuery在进行盒子碰撞检查时会看到什么。

对于调试,在检查器/开发工具中的Chrome(和IE8 +我相信)中,您可以单击HTML树视图中的元素,它将突出显示页面上的元素 - 如果您在网站上执行此操作可拖动的盒子看起来像(x =盒子的颜色):

[_______xx]

而不是:

[xx]