在localStorage中存储Sortables

时间:2013-06-07 13:50:29

标签: jquery jquery-ui local-storage

http://jsfiddle.net/2H2rx/

无法保留对可排序列表中最后一项的更改。

$( "#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 m中。没有检查过其他浏览器。

我看到其他一些问题要求类似的东西,但我现在实际上有一个半工作的解决方案,只是调试有问题。

编辑:当#1,2或3处于最终位置时,似乎发生错误。也许不是一个规则,但这对我来说更容易复制它。

1 个答案:

答案 0 :(得分:2)

你的for循环正在使用起始索引的一个值而不是数组的实际长度,正确的for循环标题应如下所示。

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