jQuery动态重新初始化/刷新draggable / sortable元素

时间:2010-02-03 15:23:25

标签: jquery dynamic refresh jquery-ui-sortable initialization

我在ready()事件中加载了一些函数。这些基本上使列表可拖动,其他区域可放置/可排序。例如。您可以将克隆拖动到多个区域(div中的列表),并且在这些多个区域内,您可以对它们进行排序/重新排序(但仅限于每个区域内)。这非常有效。

我有一个按钮,可以为要放入的项目动态创建一个新区域,然后进行排序。它可以完美地创建新区域,但您不能将项目放入其中,或者甚至可以将它们排序。

我意识到这与我使用ready()事件在页面加载时使所有区域可以放置/可排序这一事实有关,并且实际上并没有动态地重新运行这些函数。

我尝试在按钮的单击功能中对这些元素使用'刷新'。例如

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

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

感谢。

1 个答案:

答案 0 :(得分:7)

为什么不将初始化编码为自己的jQuery插件?然后你的初始化代码以及添加动态元素的代码就可以这样设置。

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

然后,您可以在动态添加内容时重复使用它:

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