2010-02-05 88 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