JQuery UI拖放时没有注意到拖动过程中发生的DOM更改?

时间:2010-04-13 16:32:34

标签: jquery user-interface drag-and-drop

我有一个html表,其中每一行(<tr>)代表一组客户端计算机。可以展开每一行以显示属于该组的客户。包含客户端的<tr>始终生成但隐藏,并在单击每行开头的加号按钮时显示。

只要此组已经展开,就可以将客户端本身(它们是<div>)拖放到另一个组中。到目前为止一切正常。

我现在想要实现的是客户端可以被拖动到折叠组,并且在一小时左右悬停组后,它将被扩展,客户端可以被丢弃到该组的其他客户端。

我使用in的{​​{1}}和out事件对悬停进行了编程,并且它可以扩展群组,但是(现在它开始难以用文字解释; )droppable(客户端)的行为仍然好像出现的表行不在那里:droppable的droppable inout事件在旧位置被触发元素,新出现的drop的{​​{1}} inout事件永远不会被触发。

看起来JQuery在拖动开始时会记住元素的位置,大小等,如果在丢弃发生之前DOM发生了变化,这些值就不会更新......

有人可以确认此行为是正常的,还是可以由我自己的代码中的其他问题引起?任何解决方法?

(问题已经非常臃肿,所以我不包含任何代码,但如果需要,我很乐意上传它)

修改:我无法添加图片,因为我是新用户,但你可以在这里找到一个:http://img69.imageshack.us/img69/309/20100413190123.png

版本:JQuery是1.3.2,jquery-ui是1.7.2

1 个答案:

答案 0 :(得分:2)

经过一夜安眠和进一步研究后,我找到了自己问题的答案:

当拖动开始拖动时,它会计算可以接受它的所有可放置的位置。默认情况下,此后不会重新计算位置。有一个可拖动的选项可强制重新计算每个“拖动”事件:refreshPositions,请参阅:http://jqueryui.com/demos/draggable/#option-refreshPositions

目前没有功能或回调只在需要时手动触发计算(在我的情况下:扩展组时),但它是注册的功能请求。

请参阅:http://groups.google.com/group/jquery-ui/browse_thread/thread/5a1fbb37ab8ef1a9?pli=1http://dev.jqueryui.com/ticket/4911

仅在需要时手动重新计算的示例:http://forum.jquery.com/topic/how-to-make-draggable-execute-refreshpositions-not-on-every-mousemove-but-with-a-specific-callbackhttp://trycatchfail.com/blog/post/2010/01/15/Work-around-for-jQuery-UI-Draggable-refresh-limitation.aspx