【发布时间】:2011-03-03 00:24:19
【问题描述】:
我有一个项目列表,其中包含一些与之关联的 jQueryUI 按钮。在一个动作(删除一个项目)之后,我想通过 ajax 重新加载列表。
唯一的问题是当我这样做时,JQueryUI 按钮不再显示,只显示标准标记。
我知道我可以使用jQuery.live() 来动态添加点击处理程序等,但是如何将 jQueryUI button() 应用到它们?
【问题讨论】:
我有一个项目列表,其中包含一些与之关联的 jQueryUI 按钮。在一个动作(删除一个项目)之后,我想通过 ajax 重新加载列表。
唯一的问题是当我这样做时,JQueryUI 按钮不再显示,只显示标准标记。
我知道我可以使用jQuery.live() 来动态添加点击处理程序等,但是如何将 jQueryUI button() 应用到它们?
【问题讨论】:
当您通过 ajax 重新加载时,在该 context 中调用 .button()(或您正在使用的任何变体),如下所示:
$.ajax({
//other options..
success: function(data) {
//insert elements
$(".button", data).button();
}
});
这将使用class="button" 在仅在响应中(而不是其他已经在页面/DOM 其他地方的其他元素)上运行.button()。
你不能在这里真正使用.live() 或类似的东西,它依赖于事件冒泡,与添加/删除元素没有任何关系......当涉及到插件时,你需要再次执行它们您添加的新元素。或者,效率较低但更通用的方法是.livequery() plugin,使用如下:
$(".button").livequery(function() {
$(this).button();
});
正如我所说,它并不是世界上最高效的东西,因为它实际上以各种方式监控 DOM 的变化。
【讨论】:
您可以重新绑定事件处理程序:
$("#mybutton").unbind().click(function(){ ..do..something... });
【讨论】: