Twitter Bootstrap 弹出框不适用于动态生成的内容

Posted

技术标签:

【中文标题】Twitter Bootstrap 弹出框不适用于动态生成的内容【英文标题】:Twitter Bootstrap Popovers not working for Dynamically Generated Content 【发布时间】:2012-08-10 10:29:47 【问题描述】:

刚刚在 *** 上发帖,所以如果我在这里搞砸了任何事情,我提前道歉。

我正在使用 Twitter Bootstrap 的弹出框。我的弹出框似乎适用于我手动输入到我的 html 文档中的元素 - 但不是我通过 javascript / Ajax 动态生成的元素。

例如,如果我手动将其直接添加到我的 HTML 文档中,弹出框似乎可以工作:

<p rel=popover data-content='It is so simple to create a tooltop for my website!' data-original-title='Twitter Bootstrap Popover'>hover for popover</p>

但我真正需要的是让我的动态生成的元素具有弹出框。我使用 XMLHttpRequest 向 php 文件发送请求,然后获取 responseText 并显示它。当我将这行代码添加到前面提到的 PHP 文件中时:

 echo "<p rel=popover data-content='It is so simple to create a tooltop for my website!' data-original-title='Twitter Bootstrap Popover'>hover for popover</p>";

... 果然,出现了“hover for popover”字样——但popover本身不起作用!

这已经让我发疯了一段时间,如果有人能帮我一把,那将是不可思议的!我还添加了我用来在下面启用 Bootstrap 弹出框的 JQuery 函数,这是值得的。

$(function ()
$("[rel=popover]").popover(placement:'left');
); 

我对类似问题进行了彻底的搜索,我能找到的最好的是this link。但是该链接似乎也没有任何解决方案。再次提前感谢!

更新:

已修复!非常感谢所有提供帮助的人。我的问题是在将元素添加到文档对象模型之前调用了该函数。有多种可能的修复方法 - 我只是通过将 popover 函数转移到 Ajax 函数的 END 来测试解决方案,它起作用了!

【问题讨论】:

如何将 AJAX 调用返回的 HTML 添加到 DOM 中? 类似问题; ***.com/questions/16990573/… 【参考方案1】:

您需要在元素位于 DOM 之后调用 $("[rel=popover]").popover(placement:'left');

更新

如果你使用的是 jQuery

$(element_selector)
  // load results into HTML of element_selector
  .load('your/php/file')
  // when done, initialize popovers
  .done(function()
    $("[rel=popover]").popover(placement:'left');
  );

jQuery ajax 请求包罗万象

$.ajaxComplete(function()
    $("[rel=popover]").popover(placement:'left');
  );

【讨论】:

是的,但我认为这是假设的,因为他打电话给$("[rel=popover]").popover(placement:'left'); 成功了!你是对的,我的函数是在生成的元素进入 DOM 之前被调用的。非常感谢你的帮助,它也在这个过程中教会了我。现在它完美无缺。如果可以的话,我会投票给你! xD 您可以随时标记自己问题的正确答案。欢迎使用 ***! 完成!太感谢了!我在 *** 上潜伏了很长时间,直到现在我一直都在找到解决我所有问题的方法……我以为它终于让我失望了,但我错了! :D 我的意思是,我假设他使用的是 jQuery,因为所有的 Bootstrap JS 文件都依赖于它【参考方案2】:

在ajax的成功函数中需要调用popover。像这样的

success:function()
  $("[rel=popover]").popover(placement:'left');

【讨论】:

谢谢!是的,我意识到我的函数是在生成的元素位于 DOM 之前被调用的。非常感谢你的帮助,它也在这个过程中教会了我!【参考方案3】:

此功能将在选择器中正常工作,您必须指定页面上您必须搜索“rel=popover”的位置,就像我放的 *

$(function ()  

console.info($("*[rel=popover]"));
$("*[rel=popover]").popover();
);

【讨论】:

以上是关于Twitter Bootstrap 弹出框不适用于动态生成的内容的主要内容,如果未能解决你的问题,请参考以下文章

Knockstrap 弹出框不适用于 require.js

如何使用 Twitter Bootstrap 弹出框进行 jQuery 验证通知?

如何使用 Twitter Bootstrap 中的弹出框显示图像?

Twitter Bootstrap 弹出框内的 HTML

Twitter Bootstrap 弹出框/工具提示错误与移动设备?

动态更改 Bootstrap 弹出框的模板