我有一個項目列表中有一些jQueryUI按鈕與它們關聯。行動(刪除項目)後,我想通過ajax重新加載列表。添加jQueryui按鈕動態添加內容
唯一的問題是,當我這樣做時,JQueryUI按鈕不再顯示,只是標準標記。
我知道我可以使用jQuery.live()
來動態添加點擊處理程序等,但我如何應用jQueryUI button()
他們?
我有一個項目列表中有一些jQueryUI按鈕與它們關聯。行動(刪除項目)後,我想通過ajax重新加載列表。添加jQueryui按鈕動態添加內容
唯一的問題是,當我這樣做時,JQueryUI按鈕不再顯示,只是標準標記。
我知道我可以使用jQuery.live()
來動態添加點擊處理程序等,但我如何應用jQueryUI button()
他們?
當你通過AJAX重新加載,調用.button()
(或任何變形您正在使用)在context,像這樣:
$.ajax({
//other options..
success: function(data) {
//insert elements
$(".button", data).button();
}
});
這隻會在元素上運行.button()
,只有在響應(而不是其他地方的頁面/ DOM中的其他人)使用class="button"
。
你不能真的使用.live()
或類似的東西,這依賴於事件冒泡,而不是真的與添加/刪除元素有關......當涉及到插件時,你需要再次執行它們以對付您添加的新元素。或者,效率較低,但更通用的方法將是.livequery()
plugin,像這樣使用:
$(".button").livequery(function() {
$(this).button();
});
正如我雖然說,這不是世界上最有效的事情,因爲它實際上監視在各種變化的DOM方法。
可以重新綁定的事件處理程序:
$("#mybutton").unbind().click(function(){ ..do..something... });
非常感謝 - 但它不只是事件處理程序 - jqueryui爲每個按鈕添加標記和其他內容。否則我可以使用點擊處理程序的實況。如果可能的話,我試圖避免在jQuery.load()之上使用回調JS。 – Hippyjim 2010-06-12 14:18:35
很感謝。所以簡短的答案是 - 除非你使用livequery插件,否則你不能。無論如何可能會檢查出它,但如果這是它的工作原理,我會考慮你的觀點。 關於在上下文中調用方法的有用信息雖然 - 我認爲我主要關心的是避免在頁面中的所有元素上重新運行.button(),您回答。 – Hippyjim 2010-06-12 14:47:12
作爲這個答案的附註,我必須顛倒「刷新」的順序,它是$(「。button」,data).button(),我必須做$(data,「.button」)。按鈕(),以防萬一別人正在嘗試,它不工作。 – MatRichard 2012-04-05 18:29:13