将 jQueryui 按钮添加到动态添加的内容

Posted

技术标签:

【中文标题】将 jQueryui 按钮添加到动态添加的内容【英文标题】:Adding jQueryui Buttons to dynamically added content 【发布时间】:2011-03-03 00:24:19 【问题描述】:

我有一个项目列表,其中包含一些与之关联的 jQueryUI 按钮。在一个动作(删除一个项目)之后,我想通过 ajax 重新加载列表。

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

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

【问题讨论】:

【参考方案1】:

当您通过 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 的变化。

【讨论】:

非常感谢。所以简短的回答是 - 你不能,除非你使用 livequery 插件。无论如何可能会检查一下,但如果它是这样工作的,我会同意你关于效率的观点。关于在上下文中调用方法的有用信息 - 我认为我主要关心的是避免在页面中的所有元素上重新运行 .button() ,您回答了。 作为这个答案的旁注,我不得不颠倒“刷新”的顺序,它是 $(".button", data).button(),我必须做 $(data , ".button").button(),以防万一其他人尝试但它不起作用。【参考方案2】:

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

$("#mybutton").unbind().click(function() ..do..something... );

【讨论】:

非常感谢 - 但不仅仅是事件处理程序 - jqueryui 为每个按钮添加标记和其他内容。否则我可以将 live 用于点击处理程序。如果可能的话,我试图避免在 jQuery.load() 之上使用回调 JS。

以上是关于将 jQueryui 按钮添加到动态添加的内容的主要内容,如果未能解决你的问题,请参考以下文章

jquery sortable不适用于动态添加的项目

如何将按钮动态添加到 TCategoryPanelGroup?

如何将 jquery ui 自动完成添加到动态创建的元素?

将选择器添加到动态添加的 UIScrollView 视图上的按钮

将按钮动态添加到垫表角材料

如何将 DOM 元素附加到动态新添加的 DOM 元素