JQuery + Sortable + live

Я добавляю элементы списка на страницу динамически с помощью $.get, а затем добавляю их к элементу OL. Довольно обычный до этого момента.

Но jQuery не знает об этих новых элементах, когда они загружаются на страницу, и я не могу сделать их отсортированными.

Я провел несколько испытаний с jQuery Live, но не получил ничего, что...

Ответ 1

Метод 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({
        ...
    });
}

Ответ 3

в конце вашего кода просто добавьте .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();
)};

Ответ 4

Я нашел это решение и отлично работал у меня.

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