【问题标题】:How to trigger a bootstrap popover on mouseover event如何在鼠标悬停事件上触发引导弹出窗口
【发布时间】:2015-03-21 12:32:36
【问题描述】:

我有一个 html 表,其中一行如下所示:

<tr>
    <td><input type="checkbox" name="check[]" value="265"></td>   
    <td>265</td>
    <td>NO MATCH</td>
    <td>http://stackoverflow.com/</td>
    <td>No</td>
    <td>0</td>
    <td>f79a8316891</td>
  </tr>

我正在尝试构建一个 jquery 函数,如果我将它传递给表格单元格中的 URL,它将打开一个引导 2.32 弹出窗口。到目前为止,我有:

    $("[data-bind='popover']").popover({
         trigger: 'hover',
         html: true,
         content: function(){ 
          return $(this).data('content');
         }
        });



        $('td').on('mouseover', function(e) {
            var contents = $( this ).html() ;

            if (contents.match("^http")) {
                console.log(contents);

                 this.innerHTML = '<a href="myreference.html" data-bind="popover"' + ' data-content="'+contents +'"> link </a>';
                 console.log(this.innerHTML);

            }
        });

这里的弹出框部分基于http://jsfiddle.net/8DP4T/1/

当我将鼠标悬停在表格中的 url 上时,它会按预期形成一个弹出链接。但是,当我将鼠标悬停在它上面时,就我所见,没有弹出窗口出现。该代码确实有效,但没有触发弹出窗口。

有趣的是,我也放了

<a href="myreference.html" data-bind="popover data-content="http://upload.wikimedia.org/wikipedia/commons/a/a5/Flower_poster_2.jpg">Brick</a> 

在我的桌子下面,这正在使用创建的弹出框。我想知道这种行为是否与操作顺序有关,因为弹出链接是在 DOM 设置后动态创建的。有人可以在这里给我建议吗?

【问题讨论】:

  • 不应该像 jsfiddle 中的 $('.popover-markup &gt; .trigger') 吗?
  • 那也不行。
  • 你永远不会初始化你在那个表格单元格中生成的锚点,为了让它工作你必须像另一个一样初始化它。

标签: javascript jquery html css twitter-bootstrap


【解决方案1】:

引导弹出框的默认触发器是“点击”事件。您在这里定义的是“在鼠标悬停时,检查鼠标下的内容是否为链接,如果是,则定义弹出框”,但您的问题是您从未触发弹出框打开,您只是定义了它这样如果点击它就会打开。

改变这个...

$('.popover-markup').popover(...)

到这里……

$(this).popover(...)

这样“

”就变成了弹出框(我不是 100% 确定您可以将 定义为弹出框,但它似乎应该可以工作)。然后,在定义弹出选项的代码之后,您可以立即触发“点击”事件,或者您可以通过发送“显示”命令触发它打开。最后,您可以通过在定义弹出框时将“触发器”:“悬停”添加到您的选项列表来触发它打开......这将在用户不再将鼠标悬停在 td 元素上后自动隐藏它。
//Trigger click
$(this).trigger("click");

//Trigger popover open (probably the better way)
$(this).popover("show");

//Trigger on hover
$(this).popover({
    ...
    trigger: 'hover',
});

总之……

$('td').on('mouseover', function(e) {
     var contents = $( this ).html() ;

    if (contents.match("^http")) {
       $(this).popover({
            html : true,
            title: function() {
              return $(this).parent().find('.head').html();
            },
            content: function() {
              return $(this).parent().find('.content').html();
            },
            container: 'body',
            placement: 'bottom'
        });

        // Trigger the popover to open
        $(this).popover("show");
    }
});

【讨论】:

  • 谢谢,我将不得不回到这个问题。通过单击或悬停,我意识到弹出框根本不起作用。
  • 我已经让 popover 与 bootstrap 2.32 一起工作,并且我已经根据您关于如何解决这个问题的建议修改了这个问题。
  • 我认为您在这里走在正确的轨道上,所以我会接受您的回答,但是关于动态创建的弹出框存在一些问题。 - stackoverflow.com/questions/11947094/…
【解决方案2】:

你需要添加

触发器:'悬停'

到选项对象如下:

$('.popover-markup > .trigger').popover({
        html : true,
        title: function() {
          return $(this).parent().find('.head').html();
        },
        content: function() {
          return $(this).parent().find('.content').html();
        },
        container: 'body',
        placement: 'bottom',
        trigger: 'hover'
    });
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>


<div class="popover-markup">
  <a href="#" class="trigger">
    This link triggers the popover.
  </a>
  <div class="head hide">
    This is the popover title.
   </div>
  <div class="content hide">
    <p>This is the popover content.</p>
  </div>
</div>

【讨论】:

  • 嗨,Franz,我正在使用
  • 无论我将鼠标悬停在链接上还是单击它,都不会出现弹出窗口。
  • 我已经修改了上面的问题
  • 感谢您的尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多