我有一个项目列表中有一些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