【问题标题】:bootstrap popover - div disappears on mouse movementbootstrap popover - 鼠标移动时 div 消失
【发布时间】:2017-09-30 16:49:12
【问题描述】:

我正在使用引导弹出框,我的 div 在鼠标悬停时正确显示。但是,当我移动鼠标时,div 消失了。这是代码。我希望 div 保留,除非用户点击其他地方。

<div rel="popover" data-trigger="hover" data-placement="top" data-original-title="<h4>Deceased & Informant</h4>" data-content="'.$content.'" data-html="true">data

我找到了一个相关的 jsfiddle example 来更好地解释这个问题。

【问题讨论】:

    标签: javascript twitter-bootstrap popover


    【解决方案1】:

    您可以使用manual 触发器并编写自己的事件处理程序来执行您想要的操作。

    在下面,我使用 JQuery 在下一个 mouseenter 事件上显示弹出框,然后在文档中的任何单击时,我将隐藏弹出框并为下一个 mouseenter 重置事件处理程序事件。

    $(function() {
      $('#popoverData').one('mouseenter', function() {
        $(this).popover('show');
      });
    
      $(document).on('click', function() {
        $('#popoverData').popover('hide');
        $('#popoverData').one('mouseenter', function() {
          $(this).popover('show');
        });
      });
    });
    @import url('//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css');
    
    .container {
        margin: 40px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    
    <script src="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.1.0/bootstrap.min.js"></script>
    
    <div class="container">
    
        <a id="popoverData" class="btn" href="#" data-content="Popover with manual data-trigger" rel="popover" data-placement="bottom" data-original-title="Title" data-trigger="manual">Popover with manual data-trigger</a>
        
    </div>

    这是一个相同的 jsfiddle:http://jsfiddle.net/a8kamz92/

    更新

    这是一个示例,展示了如何将相同的逻辑应用于多个弹出框。基本前提是使用匹配多个弹出框的 JQuery 选择器。这只是匹配多个弹出框的一种方法的示例;可以使用更具体的选择器来满足您的需求。

    $(function() {
      var popoversSelector = '.has-popover div[rel=popover]';
    
      $(popoversSelector).one('mouseenter', function() {
        $(this).popover('show');
      });
    
      $(document).on('click', function() {
        var popovers = $(popoversSelector);
    
        popovers.popover('hide');
        popovers.one('mouseenter', function() {
          $(this).popover('show');
        });
      });
    });
    @import url('//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css');
    
    .container {
        margin: 40px;
    }
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.1.0/bootstrap.min.js"></script>
    
    
    <table class="table">
      <tr>
        <th>Month</th>
        <th>Savings</th>
      </tr>
      <tr>
        <td class="has-popover">
          <div rel="popover"
               data-trigger="manual"
               data-placement="bottom"
               data-original-title="Informant"
               data-content="content"
               data-html="true">
                 January
          </div>
        </td>
        
        <td class="has-popover">
          <div rel="popover"
               data-trigger="manual"
               data-placement="bottom"
               data-original-title="Informant"
               data-content="content"
               data-html="true">
                 $100
          </div>
        </td>
      </tr>
    </table>

    这里也是 jsfiddle:http://jsfiddle.net/erv5ssoy/

    【讨论】:

    • 这很好。谢谢 :)。我需要更多建议。我的 div 实际上是一个行数据,这意味着我不能为每个行数据分配相同的 id。其次,我在悬停时显示的数据是另一个内部有多个选项卡的小 div/table,所以我希望它在鼠标远离该 div/table 时消失,而不是在单击时消失。看看这里jsfiddle.net/uwxrhk3j/1
    • 您可以尝试的一件事是仅使用适用于所有弹出框的 JQuery 选择器,而不是通过 id。在您的示例中,您的选择器可能是".has-popover div[rel=popover]",它将匹配表格单元格中的所有弹出框与has-popover 类,然后使用与我的答案相同的逻辑。这是它的 jsfiddle:jsfiddle.net/erv5ssoy
    • 对于在不同触发器上消失的部分(在您的情况下,弹出窗口中的mouseleave)您应该更新您的问题或问另一个问题,因为您的原始问题询问如何使弹出窗口消失当用户点击其他地方时。可以做你想做的事,但我认为在一个答案中尝试 2 个相互矛盾的解决方案会使事情复杂化。
    • 这里有一个 jsfiddle 可以帮助您开始第二个问题:jsfiddle.net/0ojn2ror。如果我的回答对您最初的问题有所帮助,我将不胜感激:)
    • 太棒了!!有用。我感谢所有细节和工作示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多