如何将Twitter Bootstrap工具提示绑定到动态创建的元素?

时间:2012-03-31 19:08:00

标签: jquery twitter-bootstrap

我正在使用Twitter引导工具提示,其中包含以下javascript:

$('a[rel=tooltip]').tooltip();

我的标记看起来像这样:

<a rel="tooltip" title="Not implemented" class="btn"><i class="icon-file"></i></a>

这很好用,但我动态添加了<a>个元素,并且这些动态元素没有显示工具提示。我知道这是因为我只在文档加载了典型的jquery $(document).ready(function()功能时绑定.tooltip()一次。

如何将其绑定到动态创建的元素?通常我会通过jquery live()方法执行此操作。但是,我用来绑定的事件是什么?我只是不确定如何使用jquery .live()连接bootstrap .tooltip()。

我发现有一种方法可以让这项工作是这样的:

/* Add new 'rows' when plus sign is clicked */
$("a.add").live('click', function () {
    var clicked_li = $(this).parent('li');
    var clone = clicked_li.clone();

    clone.find(':input').each(function() {
        $(this).val('');
    });

    clicked_li.after(clone);
    $('a[rel=tooltip]').tooltip();
});

这很有效,但似乎有点hackish。我也在$(ready)调用中调用完全相同的.tooltip()行。那么,当页面第一次加载并匹配该选择器时,存在的元素是否会以两次工具提示结束?

我认为这种方法没有任何问题。我只是在寻找最佳实践或了解行为。

8 个答案:

答案 0 :(得分:483)

试试这个:

$('body').tooltip({
    selector: '[rel=tooltip]'
});

答案 1 :(得分:129)

如果您要初始化多个工具提示配置,这对我来说效果很好。

$("body").tooltip({
    selector: '[data-toggle="tooltip"]'
});

然后,您可以使用data属性设置单个元素的属性。

答案 2 :(得分:16)

对我来说,只捕捉mouseenter事件有点儿麻烦,工具提示没有正确显示/隐藏。 我不得不写这个,它现在正在完美地运作:

$(document).on('mouseenter','[rel=tooltip]', function(){
    $(this).tooltip('show');
});

$(document).on('mouseleave','[rel=tooltip]', function(){
    $(this).tooltip('hide');
});

答案 3 :(得分:15)

我在这里发布了更长的答案:https://stackoverflow.com/a/20877657/207661

TL; DR:您只需要在文档就绪事件中运行一行代码:

$(document.body).tooltip({ selector: "[title]" });

其他答案中建议的其他更复杂的代码似乎没有必要(我已经使用Bootstrap 3.0进行了测试)。

答案 4 :(得分:7)

对我来说,这个js再现了与Paola

相同的问题

我的解决方案:

$(document.body).tooltip({selector: '[title]'})
.on('click mouseenter mouseleave','[title]', function(ev) {
    $(this).tooltip('mouseenter' === ev.type? 'show': 'hide');
});

答案 5 :(得分:2)

而不是在完整的身体中搜索它。 我可以在这样的场景中使用动态标题选项:

$btn.tooltip({
  title: function(){
    return $(this).attr('title');
  }
});

答案 6 :(得分:1)

我发现这些答案的组合给了我最好的结果 - 允许我仍然定位工具提示并将其附加到相关容器:

$('body').on('mouseenter', '[rel=tooltip]', function(){
  var el = $(this);
  if (el.data('tooltip') === undefined) {
    el.tooltip({
      placement: el.data("placement") || "top",
      container: el.data("container") || false
    });
  }
  el.tooltip('show');
});

$('body').on('mouseleave', '[rel=tooltip]', function(){
  $(this).tooltip('hide');
});

相关HTML:

<button rel="tooltip" class="btn" data-placement="bottom" data-container=".some-parent" title="Show Tooltip">
    <i class="icon-some-icon"></i>
</button>

答案 7 :(得分:0)

在不使用jQuery的Bootstrap 5中,您可以执行以下操作:

- name: Getting process IDs of the process
  pids:
      name: cron
  register: cron_pids

- name: Printing the process IDs obtained
  debug:
    msg: "Process IDs of cron:{{cron_pids.pids|join(',')}}"

(OR)

You can use shell module to retrieve the info using registered variable

- name: Get running processes list from remote host
   shell: "ps -aux --no-headers | grep cron | awk '{print $2}'"
   register: running_processes

- debug:
       msg: "{{running_process}}"
const btn = document.createElement('button');
btn.innerHTML = 'Click me';
btn.dataset['toggle'] = 'tooltip';
btn.dataset['placement'] = 'top';
btn.title = 'Your Tooltip Here';
new bootstrap.Tooltip(btn);

document.getElementById('parent').appendChild(btn);