jQuery .sortable + receive事件:获取插入元素的位置

时间:2010-06-25 07:29:16

标签: jquery jquery-ui-sortable

我有一个jQuery可排序元素和另一个可拖动元素。 使用可排序接收事件,我获得新插入的对象并启动ajax查询以将其写入数据库。 但是,获得新元素的正确位置也会很好。当我在receive事件上触发sortable(“serialize”)时,新元素不在字符串中。我怎样才能找到插入元素的位置?


可拖动的:

<div id="docP1" class="docPopC">';
    for($x = 10; $x<30; $x++){
        if($block_ele[$x])
            echo '<p id="b_'.$x.'" class="doc_inhalt_popup">'.$block_ele[$x].'</p>';
    }
echo '
</div>

可排序:

<div id="aktiv"><input type="hidden" value="xx" /></div>

jQuery的:

$("#aktiv").sortable({
connectWith: '#aktiv',
forcePlaceholderSize: true,
items: 'div.block',
receive: function(event, ui){
    var nblock = ui.item.attr("id").split("_");

    $.get('inc_dokumente.php', {
        index : 'n256',
        aktiv : $("#aktiv input:first").val(),
        id : rel,
        block: nblock[1]
    }, function(data){ 
        load_bloecke();
    });
},
update: function(event, ui){ 
    $.get('inc_dokumente.php', {
        index : 'n257',
        aktiv : $("#aktiv input:first").val(),
        id : rel,
        sort: $("#aktiv").sortable("serialize")
    }, function(data){
        if(data) alert(data);
        load_bloecke();
    });
}
});

$(".docPopC p").draggable({
    connectToSortable: '#aktiv',
    helper: 'clone',
    revert: 'invalid',
    zIndex: 9999999,
    appendTo: 'body'
});

1 个答案:

答案 0 :(得分:0)

#aktiv声明为可排序

时,问题是此选项
items: 'div.block'

有了这个,你说只有带有类块的div应该在#aktiv中被认为是可排序的,所以当你执行$("#aktiv").sortable("serialize")时,jQuery不会评估你放入它的项目,因为它是{{ 1}}元素。如果是这种情况,那么新删除的项目也不能与其他元素(p s)排序,因此您正在解决几个问题)

可能的解决方案:

     
  • 让#aktiv认为div.block元素是可排序的(p
  •  
  • 使用课程items: 'div.block, p.doc_inhalt_popup
  • 将您拖动到p的{​​{1}}元素设为divs   
         
    • (您可以跳过在HTML中提供可拖动的类块,而不是在收到项目时使用jQuery添加它)   
    •