2010-04-13 34 views
3

我有一個html表格,其中每行(<tr>)代表一組客戶端計算機。每行可以展開以顯示屬於該組的客戶端。包含客戶端的<tr>始終會生成但隱藏,並在每行開始處單擊加號按鈕時顯示。JQuery UI拖放不會注意拖動過程中發生的DOM更改嗎?

只要該組已被展開,客戶端本身(它們是<div>)可以在另一個組中拖放。到目前爲止它工作正常。

我現在想要實現的是客戶端可以被拖拽到一個摺疊的組,並且在徘徊第二個組之後,它將被展開並且客戶端可以被放置在該組的其他客戶端之中。

我編程使用droppableinout事件懸停,並擴大該組的所有權利,但(現在它開始是很難用言語來解釋;)可放開(客戶端)的行爲仍然好像沒有出現表格線:inoutdrop可投擲的事件在元素的舊位置上被觸發,並且新出現的<tr>的事件從不被觸發。

看起來好像JQuery的記憶位置,拖動開始元素的大小等時,也不會更新這些值如果在下降之前發生的DOM的改變......

燦有人確認這種行爲是正常的,還是可以由我自己的代碼中的另一個問題引起的?任何解決方法?

(問題十分臃腫已經所以我不包括任何代碼,但我會很樂意把它上傳如果需要的話)

編輯:因爲我是新用戶,我不能添加圖片,但你可以找到一個位置:http://img69.imageshack.us/img69/309/20100413190123.png

版本:jQuery是1.3.2和jQuery UI的是1.7.2

回答

2

一個良好的睡眠,並進一步研究後,我找到了答案,以我自己的問題:

當可拖動開始拖動時編輯它計算所有可以接受它的droppables的位置。默認情況下,此後不重新計算頭寸。有一個可拖動的選項,強制重新計算每個「拖動」事件: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

worarounds的實例manuallay僅在需要時重新計算: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