Jquery可排序对象Ajax请求发送错误的对象

时间:2012-01-28 15:34:52

标签: jquery jquery-ui-sortable

我已经成功实现了JQuery Sortable。我也可以使用单独的调用将其写入数据库。但是,这仅适用于受影响的第一组匹配类。第二个,我认为如果有的话,我认为不起作用。

<ul class="grouped-articles-list">
      <li id="4weight10"></li>
      <li id="3weight20"></li>
      <li id="2weight30"></li>
</ul>

<ul class="grouped-articles-list>
      <li id="5weight50"></li>
      <li id="6weight60"></li>    
      <li id="22weight70"></li>
      <li id="18weight80"></li>     
</ul>

我有多个UL共享一个共同的类。视觉方面都可以正常工作,完全可以排序。然后我将对象写入一个数组,Array = $(“.grouped-articles-list”)。sortable('toArray')然后调用ajax函数。如果我执行trace / console.log,它只会返回上一个(第一个)类的对象。

是否可以多次使用Classes并仍然可以使用ToArray?在这种情况下,如果我影响第二个UL并进行了追踪,它仍会返回[“4weight10”,“3weight20”,“2weight30”]。

我会在下面粘贴我的代码,但它有点冗长......

function makeSortable(){
    var before;
    var weight; 
    var newWeight = [];
    var newID = [];

    $(".grouped-articles-list").sortable({
        tolerance: 'pointer',   
        items: "li:not(.sortable_disabled)",
        start: function(event, ui){
            newWeight.length = 0;
            var resultbefore = $(".grouped-articles-list").sortable('toArray');
            before = resultbefore;
            //goes through each item and saves their weight to an array
            $.each(before, function(i) { 
            newWeight.push(splitWeightFromId(before[i])[3]);               
            });
        },
        stop: function(event, ui) {
            newID.length = 0;
            var after = $(".grouped-articles-list").sortable('toArray');
            $.each(after, function(i) { 
            //goes through each item in the array and saves out their id  
            newID.push(splitWeightFromId(after[i])[1]);
            // Only adds changed items
            if (newID[i] !== splitWeightFromId(before[i])[1]){
            //as the items move, but the weights stay the same
            //sends the affected ID with the always stationary weight off
               change_weight( newID[i], newWeight[i] )
        }     
    });
});

Ajax功能

function change_weight( link_id, new_weight ) { 
  $.ajax({
        type: "PUT",
        url:    "/article_relationships/" + link_id,
        data: {article_relationship : {
                                    weight : new_weight
                                    } },
        datatype: "js",
        remote: "true"
      });
}

感谢您的时间,

任何提示,提示或建议都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

我设法解决这个问题,可能是一个更好的方法,但创建一个数组,并为每个项目进行处理工作正常。

sortableArray = ($('.grouped-articles-list'));
    $(sortableArray).each(function(index){
    $(sortableArray[index]).sortable({
        tolerance: 'pointer', 
        items: "li:not(.sortable_disabled)", 
        start: function(event, ui){ 
          newWeight.length = 0; var resultbefore = $(sortableArray[index]).sortable('toArray');