2009-11-04 61 views
10

我使用$ .get动态添加列表项到页面,然后将它们附加到OL元素。这点相当平常。jQuery + Sortable + live

但jQuery没有意识到这些新项目,当他们被加载到页面,我不能让他们排序。

我做了一些试验使用jQuery现场,但没有取得任何丝毫的是...

回答

16

.sortable()的的refresh方法似乎不承认其不是经由.sortable()功能加入li的。

尝试将您的.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

这不仅是李,它基本上是一切,但方法是正确的和工作。 – 2011-06-24 13:35:47

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(); 
)}; 
-2

我发现这个解决方案为我工作的罚款。

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