2013-06-07 3 views
2

http://jsfiddle.net/2H2rx/Сохранение Sortables в LocalStorage

Возникли проблемы сохранения изменений в последний элемент в списке. Сортируемого

$("#sortable").sortable(); 
$("#sortable").on("sortupdate",function(event, ui) { 
     var sorted = $(this).sortable("serialize"); 
     console.log(sorted); 
     localStorage.setItem('sorted', sorted) ; 

}); 

if(localStorage.getItem("sorted") !== null){ 
    var arrValuesForOrder = localStorage.getItem('sorted').substring(6).split("&div[]="); 

    var $ul = $("#sortable"); 
    $items = $("#sortable").children(); 

// loop backwards so you can just prepend elements in the list 
// instead of trying to place them at a specific position 
    for (var i = arrValuesForOrder[arrValuesForOrder.length - 1]; i >= 0; i--) { 
    // index is zero-based to you have to remove one from the values in your array 
    $ul.prepend($items.get((arrValuesForOrder[i] - 1))); 
    } 
} 

$("#sortable").disableSelection(); 

Я пытаюсь закодировать способ хранения сортировок в локальном хранилище. У меня небольшая проблема, которая, похоже, зависит от последнего элемента, и это происходит периодически, после нескольких раз. Что-то его нарушает? Он не будет загружать изменения в последний элемент через несколько раз или будет произвольно переупорядочивать их. Я не могу сказать. Чтобы реплицировать, вы должны загрузить ссылку, переупорядочить несколько раз, запустить несколько раз, переупорядочить еще несколько. В конечном итоге он не сохранит изменения в последнем элементе, по крайней мере, в Chrome 27.0.1453.110 м. Не проверял другие браузеры.

Я вижу множество других вопросов, задающих схожие вопросы, но на самом деле у меня есть полурабочее решение, просто у меня проблема с отладкой.

Редакция: Похоже, что ошибка возникает, когда № 1, 2 или 3 находится в конечной позиции. Возможно, это не правило, но для меня это более простой способ повторить его.

ответ

2

Ваш цикл for использует одно из значений для начального индекса, а не фактическую длину массива, правильный заголовок цикла должен быть следующим.

for (var i = arrValuesForOrder.length - 1; i >= 0; i--) { 
+0

Это сделало. Огромное спасибо!! –

Смежные вопросы