【发布时间】:2011-06-21 22:27:39
【问题描述】:
jQuery UI 的可放置组件有一点问题,但我不太确定是因为我的代码还是组件中的错误。
我有一个固定宽度和高度的 div。该 div 的溢出-x 设置为隐藏,溢出-y 设置为自动。 在那个 div 中,我还有一些 div。如此之多以至于外部 div 开始滚动。每个内部 div 都是一个 droppable,接受一个在包装 div 之外的可拖动对象。
如果我将可拖动项目拖放到包装器中的某个位置,一切正常。问题是如果我将元素放在包装器 div 下方不久,甚至会触发 drop 事件。
我不太擅长解释问题;因此这里有一些重现问题的代码:
只需拖放“拖我!”带有滚动条的 div 下方的容器。没想到你会看到警报“dropped”。
现在一些有趣的事情:如果您向下滚动到项目“Test28”,然后将可拖动对象拖放到包装器下方,则不会触发放置事件。当您将某些东西放在隐藏元素上时,它们看起来仍然可以访问。
那么,这是一个错误还是我需要以不同的方式编写代码才能使其正常工作? (或两者兼而有之?:-))
【问题讨论】:
-
看起来一种可能的解决方法是在 drop 事件的函数中添加此条件: if ( $(this).position().top jsfiddle.net/5NuLa/2
-
@StefanS:对我来说似乎是一个合理的解决方案。
-
有点像,但我想知道是否有人想不出更优雅的东西。稍后我会研究 jquery-ui 可放置代码。
-
@StefanS 如果您在 Chrome 中检查 DOM 元素,您会更好地了解设置溢出属性时浏览器内部发生的情况。不幸的是,看起来事件仍然会触发,因为元素仍然被渲染和定位,但是被遮蔽了......即它对 DOM 是“可见的”。您将不得不编写代码来检查父容器边界的放置位置。我会试一试,看看结果如何。
-
@lthibodeaux 这就是我的想法。可惜没有过滤器可以真正告诉您元素是否可见。 :visible 在某些情况下可以完成这项工作,但在这种特定情况下则不行。也许可以扩展 droppable.js 的 intersect 功能来涵盖这种情况? github.com/jquery/jquery-ui/blob/master/ui/…