2010-02-05 80 views
3

我试图实现拖放操作,因此我可以对数据列表进行排序,并使用相关位置更新数据库。JQuery Live和Sortable

我有一个工作示例,但是当我尝试在通过ajax引入的列表上使用相同的代码时,事件处于绑定状态,但没有任何方法被触发,并且项目不会保持交换状态,你放开鼠标)

这里是我的html

<ul class='sortable'> 
    <li> 
     <ul> 
      <li>Data</li> 
      <li>Data2</li> 
     </ul> 
    </li> 
    <li> 
     <ul> 
      <li>Data3</li> 
      <li>Data4</li> 
     </ul> 
    </li> 
</ul> 

,然后我的JavaScript看起来像这样。我只想要交换内部的UL。即含有锂等数据2

$(document).ready(function() 
{ 
    //$(".sortable").disableSelection(); 
    $(".sortable").live("dblclick", function() 
    { 
     $(".sortable").sortable({ 
      update : function() 
      { 
       alert("update"); 
      } 
     }); 
    }); 
}); 

使用一个事件像双击或单击列表是我能得到的事件在所有绑定的唯一途径。使用可排序不起作用。

这里是我已经用于试图将元件结合的代码以及上述

$(document).ready(function() 
{ 
    $(".sortable").live("sortable", function() 
    { 
     $(".sortable").sortable({ 
      update : function() 
      { 
       alert("update"); 
      } 
     }); 
    }); 
}); 

我还试图上面的代码而不.live()缠在样品但也不能工作。

下面是从服务器加载列表中的代码,

$(".myLink").live("click", function() 
{ 
    var id = $(this).attr("id"); 
    var url = base_url + "admin/controller/function/" + id; 

    showList(url); 

    return false; 
}); 


//loads data into the form div 
function showList(url) 
{ 
    var arr = new Array(); 
    $.post(url, arr, function(data) 
    { 
     $("#form").html(data); 

    }, "text"); 
} 

在正确的方向任何建议或指针会有所帮助。

感谢

回答

1

好的我已经设法解决它,我不确定为什么这会阻止它的工作,但它绝对是问题所在。列表我尝试排序有一个浮动在其上的样式表中水平显示列表。一旦我删除了这种风格,那么更新事件就会被触发。

我现在只使用display:inline to来水平设置列表的样式。我希望这有助于某人,因为我花了我的时间去解决它。

感谢您的帮助。 本

2

[更新]

您的AJAX回调线更改从$("#form").html(data);这样:

$("#form").html(data).find('.sortable').sortable(originalOptions); 

,改变你原来的sortable()命令(我假设是其他地方)到像这样:

var originalOptions = { update: function(){ alert('click');} }; 
$(".sortable").sortable(originalOptions); 

重要的是要确保originalOptions可用于您的showList功能。

[原创答案]

你只需要使用refresh时更新列表。因此,可以说,你有这样的$.post代码:

$.post('/url', { new_positions: whatever }, function(data){ 
    // data = a bunch of 'lis' but no 'ul' 
    $('.sortable').html(data).sortable('refresh'); 
}, 'html'); 

这改变了旧li项目为新的和refresh应该重新绑定并接受新项目。

+0

该列表未被更新它实际上已被添加到页面,除了使用上述的点击事件,我无法将排序绑定到该页面。但是,当用户拖放时,从不触发更新功能。 – Ben 2010-02-05 05:15:50

+0

@Ben,请更新您的问题以包含您尝试绑定元素的代码,包括将新元素动态添加到页面的代码。问题出在那里。 – 2010-02-05 05:19:41

+0

更新了我的问题。任何更多的问题只是让我知道。谢谢 – Ben 2010-02-05 05:26:40