jQuery重新初始化/刷新可拖动/可排序元素

问题描述:

我有几个函数,我加载在ready()事件。这些基本上可以拖动列表,其他区域可以拖放/排序。例如。您可以将克隆拖入多个区域(div中的列表),并且在这些多个区域中,您可以对它们进行排序/重新排序(但仅限于每个区域内)。这工作完美。jQuery重新初始化/刷新可拖动/可排序元素

我有一个按钮,它动态地创建一个新的区域项目被放入,然后排序。它完美地创建了新的区域,但是不能将物品放入其中,或者甚至不能将它们排序。

我意识到这是事实上,我正在使用ready()事件在页面加载时使所有区域可以droppable/sortable,而不是实际上重新运行这些函数动态。

我已经尝试在按钮的点击功能中对这些元素使用“刷新”。例如。

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

但这不起作用。如果我能帮忙,我想避免以任何方式重复我的代码。有没有办法使这项工作?我认为如果有一些类似于'ready()'的'live()'函数,那么这可能是一个解决方案,但没有......!

谢谢。

为什么不将自己的初始化编码为自己的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