2012-08-03 49 views
0

我在我的網頁上有一個列表(ul li),它被轉換爲jQuery的可排序列表。這一切工作正常,直到我加載列表在Ajax對話框中。然後,該列表失去其可排序的功能。由於Ajax,jQuery排序未加載

有沒有什麼辦法重新初始化可排序列表並保留所有綁定到它的事件(如update)?

我想:$('#sortable').sortable('refresh');

但是,這並沒有爲我工作。

任何想法?

+0

你能告訴你的代碼,甚至更好加載在的jsfiddle好嗎? – 2012-08-03 12:47:06

+0

@Monkieboy這對於通過ajax加載的內容來說有點困難......這不是一件容易的事,就像一個html元素一樣,表現得很怪異。這是在通過Ajax加載某些內容時發生的常見問題。它失去了JavaScript的功能。我只是沒有看到任何解決方案爲我工作。 – Vivendi 2012-08-03 12:55:12

+0

好的,即使沒有AJAX部分,是否可以獲得更多的代碼,以便您的問題可以被複制? – 2012-08-03 12:57:34

回答

0

正如你所看到的here,動態內容不會破壞可排序的功能,所以你的問題在其他地方。

更新:檢查this。瞭解更多關於.on()here

+0

它更像這樣:http://jsfiddle.net/un5ft/2/ ---整個列表被加載到ajax請求中。然後它失去它的功能 – Vivendi 2012-08-03 13:12:56

+1

你能修復例子嗎?在不存在的div上使用'.sortable()'。您也可以附加具有相同ID的div。 – Temp 2012-08-03 13:24:15

+0

這就是整個問題。我有一個這樣的代碼片段(我在'general.js'中加載'sortable()'),它總是加載到我的html頭部標籤中。因爲一些沒有被Ajax加載的頁面也有'#sortable'列表。現在在某個頁面上,我的列表被Aj​​ax加載。所以你是對的。起初,Div ID不存在,就像在這個例子中一樣。但是我想知道是否有一種方法可以在Ajax內容加載後「重新綁定」它。 – Vivendi 2012-08-03 13:31:19

2

在您的ajax方法的回調中再次重新綁定sortable()方法。

例如

$("#someDiv").load("getitems.php",function(){ 
     $("#sortableList").sortable(); 
    }); 
+1

工作,但只是可排序的部分。我放棄了之前像'update'事件附加的所有綁定。這意味着我必須基本上將整個'sortable'函數複製到'load'函數中。我必須將代碼保存在一個普通的地方(site.js),因爲沒有被Ajax加載的列表也會使用它。 – Vivendi 2012-08-03 13:16:48

+0

@Vivendi:如果你有像點擊那樣綁定的事件,改變,在方法上使用jQuery綁定它。它也可以在動態注入的DOM(AJAX的結果)中工作。 – Shyju 2012-08-03 13:25:04

0

入住這撥弄它爲我工作的排序和內容的注入就像你的榜樣。

http://jsfiddle.net/un5ft/5/

+0

問題是,整個列表是在ajax請求中加載的。然後它失去了它的功能。查看jsfiddle.net/un5ft/2 – Vivendi 2012-08-03 19:35:45

+0

你可以做這樣的事情http://jsfiddle.net/un5ft/13/或做什麼Shyju建議使用'上' – 2012-08-04 15:02:45

+0

或vell爲此事太建議使用on函數。 – 2012-08-05 09:27:15