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

dur*_*2.0 263 jquery twitter-bootstrap

我使用Twitter引导工具提示与javascript如下:

$('a[rel=tooltip]').tooltip();
Run Code Online (Sandbox Code Playgroud)

我的标记看起来像这样:

<a rel="tooltip" title="Not implemented" class="btn"><i class="icon-file"></i></a>
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我<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();
});
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*ang 499

试试这个:

$('body').tooltip({
    selector: '[rel=tooltip]'
});
Run Code Online (Sandbox Code Playgroud)

  • bootstrap 3使用$('body').tooltip({selector:'[data-toggle = tooltip]'}); (13认同)
  • @barbolo,只需使用不同的选择器进行不同的配置.这是正确的解决方案.顺便说一句,它也适用于Popover. (7认同)
  • 我不喜欢这个解决方案是你不能有多个工具提示配置.例如,如果您将工具提示放在顶部而其他工具提示放在底部,则它不起作用. (5认同)
  • 大.这是正确的答案,因为它基本上是live/on的替代品. (4认同)
  • @CalvinL [如果提供了一个选择器,工具提示对象将被委托给指定的目标.](http://twitter.github.com/bootstrap/javascript.html#tooltips) (3认同)
  • 嗯,这个答案已经很老了,@ JohnDubya,不确定是否有任何改变以及你正在使用哪个引导程序.无论如何,我应该说你应该将配置委托给html字段中的data-whatever字段.看看这个小提琴:http://jsfiddle.net/carlesso/4Qjcr/ (2认同)

roh*_*hra 137

如果您要初始化多个工具提示配置,这对我来说很有用.

$("body").tooltip({
    selector: '[data-toggle="tooltip"]'
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用data属性在单个元素上设置属性.

  • 很棒的提示.我不得不将其更改为$("body").tooltip({selector:'[data-toggle ="tooltip"]'}); (3认同)
  • 这就是Bootstrap 3的应用方法.太棒了! (2认同)

小智 16

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

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

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

  • 这非常有用,因为.on('hover')为什么不能正常工作. (3认同)

Shi*_*hah 15

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

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

$(document.body).tooltip({ selector: "[title]" });
Run Code Online (Sandbox Code Playgroud)

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


Dg *_*ard 7

对我来说,这个js再现了与Paola相同的问题

我的解决方案

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