2010-06-12 99 views
11

我有一个项目列表中有一些jQueryUI按钮与它们关联。行动(删除项目)后,我想通过ajax重新加载列表。添加jQueryui按钮动态添加内容

唯一的问题是,当我这样做时,JQueryUI按钮不再显示,只是标准标记。

我知道我可以使用jQuery.live()来动态添加点击处理程序等,但我如何应用jQueryUI button()他们?

回答

12

当你通过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方法。

+0

很感谢。所以简短的答案是 - 除非你使用livequery插件,否则你不能。无论如何可能会检查出它,但如果这是它的工作原理,我会考虑你的观点。 关于在上下文中调用方法的有用信息虽然 - 我认为我主要关心的是避免在页面中的所有元素上重新运行.button(),您回答。 – Hippyjim 2010-06-12 14:47:12

+0

作为这个答案的附注,我必须颠倒“刷新”的顺序,它是$(“。button”,data).button(),我必须做$(data,“.button”)。按钮(),以防万一别人正在尝试,它不工作。 – MatRichard 2012-04-05 18:29:13

0

可以重新绑定的事件处理程序:

$("#mybutton").unbind().click(function(){ ..do..something... }); 
+1

非常感谢 - 但它不只是事件处理程序 - jqueryui为每个按钮添加标记和其他内容。否则我可以使用点击处理程序的实况。如果可能的话,我试图避免在jQuery.load()之上使用回调JS。 – Hippyjim 2010-06-12 14:18:35