2010-02-03 88 views
2

我有幾個函數,我加載在ready()事件。這些基本上可以拖動列表,其他區域可以拖放/排序。例如。您可以將克隆拖入多個區域(div中的列表),並且在這些多個區域中,您可以對它們進行排序/重新排序(但僅限於每個區域內)。這工作完美。jQuery重新初始化/刷新可拖動/可排序元素

我有一個按鈕,它動態地創建一個新的區域項目被放入,然後排序。它完美地創建了新的區域,但是不能將物品放入其中,或者甚至不能將它們排序。

我意識到這是事實上,我正在使用ready()事件在頁面加載時使所有區域可以droppable/sortable,而不是實際上重新運行這些函數動態。

我已經嘗試在按鈕的點擊功能中對這些元素使用「刷新」。例如。

$(".field > li").draggable('refresh'); 
$(".dragrow1, .dragrow2").droppable('refresh'); 
$(".dragrow1, .dragrow2").sortable('refresh'); 

但這不起作用。如果我能幫忙,我想避免以任何方式重複我的代碼。有沒有辦法使這項工作?我認爲如果有一些類似於'ready()'的'live()'函數,那麼這可能是一個解決方案,但沒有......!

謝謝。

回答

7

爲什麼不將自己的初始化編碼爲自己的jQuery插件?然後,您的初始化代碼以及添加動態元素的代碼就可以設置這種方式。

jQuery(function() { 
    jQuery.fn.myDroppableSetup = function myDroppableSetup() { 
    this.each(function() { 
     // your setup code here 
    }); 
    return this; 
    }; 
    jQuery.fn.myDraggableSetup = // ... 
}); 

然後,你可以重新使用,當你添加的東西動態:爲響應

$('div.newlyAddedDroppable').myDroppableSetup(); 
+0

謝謝:)我居然想出別的,做了類似的事情。我創建了一個函數來設置droppables等,然後我在ready()事件中運行該函數。當我用我的按鈕創建一個新的元素時也運行這個函數。但這看起來是一個更優雅的解決方案:) 非常感謝! – WastedSpace 2010-02-03 17:52:12

相關問題