【问题标题】:Bootstrap 3 popover and tooltip on the same elementBootstrap 3 弹出框和工具提示在同一元素上
【发布时间】:2014-07-29 05:01:58
【问题描述】:

是否可以在同一个元素上使用 Bootstrap 3 的工具提示和弹出框?

我有一个表格,想在每一行 (tr) 上显示一个工具提示。此外,我想在用户单击该行时显示一个弹出框。两个组件都需要 data-toggle 属性,所以我怀疑是否可以这样做。

有人知道这是否可行或是否有解决方法吗?

【问题讨论】:

    标签: twitter-bootstrap twitter-bootstrap-3 tooltip popover


    【解决方案1】:

    你没有使用data-toggletitle等等。手动调用引导插件。看这个例子:

    <table>
      <tr tooltip-title="Tooltip title #1" 
          popover-title="popover title #1" 
          popover-content="popover content #1">
        <td>qwerty</td><td>qwerty</td><td>qwerty</td><td>qwerty</td>  
      </tr>
      <tr tooltip-title="Tooltip title #2" 
          popover-title="popover title #2" 
          popover-content="popover content #2">
        <td>qwerty</td><td>qwerty</td><td>qwerty</td><td>qwerty</td>               
      </tr>
    </table> 
    

    脚本:

    $('tr').each(function() {
      $(this).popover({    
        content : $(this).attr("popover-content"),
        title : $(this).attr("popover-title")         
      })     
      $(this).tooltip({    
        placement : 'bottom',  
        title : $(this).attr("tooltip-title")         
      })     
    })
    

    demo fiddle -> http://jsfiddle.net/79fXt/

    【讨论】:

    • 对我来说,它只需稍作改动 $(this).popover({ content : $(this).attr("popover-content"), title : function () { return $( this).attr("tooltip-title"); } }) $(this).tooltip({ placement : 'bottom', title : function () { return $(this).attr("popover-title"); } })
    【解决方案2】:

    我需要在同一个元素上同时使用工具提示和弹出框。工具提示是用户悬停时的信息,弹出框是用户单击时的确认框。

    在这种情况下,我需要工具提示在弹出框出现时消失。我在@davidkonrad 的解决方案中添加了一些代码,如下所示:

      $(this).popover({    
        content : $(this).attr("popover-content"),
        title : $(this).attr("popover-title")         
      }).tooltip({    
        placement : 'bottom',  
        title : $(this).attr("tooltip-title")         
      }).on('show.bs.popover', function() {
        $(this).tooltip('hide')
      })
    

    【讨论】:

      【解决方案3】:

      您可以将工具提示应用于&lt;tr&gt;,并将弹出框应用于所有子&lt;td&gt;。在 javascript 中定义属性并将属性附加到相关类(在此示例中为 class="my-popover"),这样您就不必多次写出弹出框。

      例如:

      查看:

       <table class="table">
        <thead>
          <tr>
            <th>#</th>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Username</th>
          </tr>
        </thead>
        <tbody>
          <tr data-toggle="tooltip" title="This tooltip is on top!">
            <td class="my-popover">1</td>
            <td class="my-popover">Mark</td>
            <td class="my-popover">Otto</td>
            <td class="my-popover">@mdo</td>
          </tr>
          <tr>
            <td>2</td>
            <td>Jacob</td>
            <td>Thornton</td>
            <td>@fat</td>
          </tr>
          <tr>
            <td>3</td>
            <td>Larry</td>
            <td>the Bird</td>
            <td>@twitter</td>
          </tr>
        </tbody>
      </table>
      

      Javascript:

      $( document ).ready(function() {
          $(".my-popover").attr({"data-toggle":"popover", "data-container":"body", "data-placement":"bottom", "data-content":"My popover content", "data-original-title":"Popover title"});
          $("[data-toggle=tooltip]").tooltip();
          $("[data-toggle=popover]").popover();
      });
      

      Bootply here

      【讨论】:

      • 我不太了解 js - $(document).ready(function() 是做什么的?我从 bootply 中删除了它,它仍然有效,那么,为什么会这样?
      • 页面加载时调用javascript/jquery。 api.jquery.com/ready 通常必须触发脚本(单击或鼠标悬停之类的操作),在这种情况下,触发器是页面加载。也许 bootply 不需要,它可以由 bootply 自动加载,我不确定,但最好将其保留在代码中。
      • 我不完全确定,但这不会为每个 td 创建一个弹出框吗?当我单击每个 td 的每个内容时,它不会同时打开 4 个弹出窗口吗?编辑:我测试了它,它完全符合我的想法。可悲的是,这对我不起作用...
      • 欢迎您尝试...是的,这更多的是一种解决方法,而不是完美的解决方案。如果弹出框处于活动状态,有一种方法可以进一步实现 javascript 以禁用弹出框,但我认为这超出了我的工资等级。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2021-08-12
      • 2013-08-26
      • 1970-01-01
      • 2012-04-08
      • 2012-10-19
      相关资源
      最近更新 更多