代码之家  ›  专栏  ›  技术社区  ›  Pierre Henry

jqueryui拖放没有注意到在拖动过程中发生的DOM更改?

  •  3
  • Pierre Henry  · 技术社区  · 14 年前

    我有一个html表格,每行( <tr> <tr> 包含的客户机总是生成的,但在单击每行开头的加号按钮时隐藏并显示。

    客户自己(他们是 <div> )可以在另一个组中拖放,只要该组已展开。到目前为止还不错。

    我现在想要实现的是,客户机可以被拖到一个折叠的组中,在一秒钟左右的时间内,它将被展开,客户机可以被放到组中的其他客户机中。

    我用 in out droppable 它扩大了群体,但是(现在开始很难用语言来解释;)dropable(客户机)的行为仍然像不存在出现的表行一样:表行 在里面 drop 在里面 外面的 新出现的事件 <

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

    有人能确认这个行为是正常的,还是由我自己的代码中的另一个问题引起的?有解决办法吗?

    (这个问题已经很夸张了,所以我没有包含任何代码,但如果需要的话,我很乐意上传)

    编辑:我无法添加图片,因为我是新用户,但您可以在此处找到: http://img69.imageshack.us/img69/309/20100413190123.png

    版本:JQuery为1.3.2,jqueryui为1.7.2

    1 回复  |  直到 14 年前
        1
  •  2
  •   Pierre Henry    14 年前

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

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

    目前没有函数或回调函数仅在需要时(在我的例子中:当一个组被展开时)手动触发计算,但它是一个注册的特性请求。

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

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