jQuery + Sortable + live

时间:2009-11-04 07:24:07

标签: jquery-ui jquery-ui-sortable

我正在使用$ .get动态地将列表项添加到页面,然后将它们附加到OL元素。很平常到这一点。

但jQuery在加载到页面时并不知道这些新项目,而且我无法将它们排序。

我使用jQuery Live进行了一些试验,但没有得到任何结果......

4 个答案:

答案 0 :(得分:18)

refresh .sortable()方法似乎无法识别li未通过.sortable()函数添加的方法。

尝试将您的.sortable()初始化代码添加到您调用文档就绪的函数中,并在您动态添加li的代码中添加。

而不是:

jQuery(document).ready(function() {
    jQuery("#mySortableOL").sortable({
        ...
    });
}
...
jQuery("#mySortableOL").append(...);
jQuery("#mySortableOL").sortable("refresh");

尝试类似:

jQuery(document).ready(function() {
    jQuery("#mySortableOL").doSort();
}
...
jQuery("#mySortableOL").append(...);
doSort();
...
function doSort(){
    jQuery("#mySortableOL").sortable({
        ...
    });
}

答案 1 :(得分:6)

你试过.sortable('刷新')? http://docs.jquery.com/UI/Sortable#method-refresh

答案 2 :(得分:0)

代码尾部的

只需附加.sortable({});并重新指定所有参数。可能有一种方法可以通过使用函数或其他东西来复制代码,但至少可以这样做。

$('#List').live('click',function(e){

var myHTMLcode = '<li>New Item</li>'

myHTMLcode.appendTo('#List').sortable({
 items  : 'li',
 axis  : 'xy',    

 update  : function(event, ui){SPECIFIC Sortable FUNCTION CODE HERE}).fadeIn();
)};

答案 3 :(得分:-2)

我找到了这个解决方案并且对我来说很好。

makesortable = function(){
        $( "#mylist" ).sortable({
            ...
        })
      };
...
// after list refresh :
makesortable();