隐藏显示的引导程序弹出窗口后需要单击两次

时间:2015-09-15 09:05:28

标签: jquery twitter-bootstrap

$('#popoverlink').popover();

$("#popoverhide").click(function() {
   $("#popoverlink").popover("hide"); 
});
#popoverlink {
    position: absolute;
    top: 100px;
    left: 100px;
}
<a href="#" id="popoverlink" class="btn" rel="popover" title="Some title">Popover</a>
<a href="#" id="popoverhide" class="btn" rel="popover" title="Some title">hide</a>

fiddle相同。对不起前一个链接错了。这个是正确的。

隐藏显示的弹出窗口后,我需要再次单击弹出窗口触发器以再次显示它。

这是一个错误吗?有什么可以避免的吗?

更新 我的意思是我用另一个按钮来隐藏一个弹出窗口

$("#popoverTrigger").popover("hide");

我需要两次点击“#popoverTrigger”来显示它。

愚蠢的解决方案

$("popoverhide").click(function() {
    var f = false;
    if($("popoverlink").next('div.popover:visible')) {
        f = true;
        $("popoverlink").popover("hide");
    }
    if(f) {
        $("popoverlink").click();
    }
})

还有其他好主意吗?

8 个答案:

答案 0 :(得分:89)

仍未在3.3.6中修复,但我在此处找到了一个建议的解决方案:

https://github.com/twbs/bootstrap/issues/16732

https://github.com/twbs/bootstrap/pull/17702/files#diff-f3e99e0bb007ace7a370f0492b9cb5abR340

我已将其应用于隐藏事件:

$('body').on('hidden.bs.popover', function (e) {
    $(e.target).data("bs.popover").inState.click = false;
});

这对我有用。与提议的修正完全相同,它将是:

$('body').on('hidden.bs.popover', function (e) {
    $(e.target).data("bs.popover").inState = { click: false, hover: false, focus: false }
});

注意:我使用委托弹出窗口,这就是我使用$('body')引用的原因。

Bootstrap 4 使用_activeTrigger代替inState

$(e.target).data("bs.popover")._activeTrigger.click = false

答案 1 :(得分:5)

这是v3.3.5中的错误:

https://github.com/twbs/bootstrap/issues/16732

现在使用3.3.4,直到它被修复。

答案 2 :(得分:4)

我最近遇到了这个错误,这就是我修复它的方法:

$('.myPopoverClass')
    .popover({
        trigger: 'manual', /* <- important, instantiates popover */
        container: 'body', /* optional */
        animation: false
    })
    .click(function(e) {
        $('.popover').not(this).hide(); /* optional, hide other popovers */
        $(this).popover('show'); /* show popover now it's setup */
        e.preventDefault();
    });

答案 3 :(得分:0)

我有一个弹出窗口,在3秒后淡出,需要双击才能重新打开它。遵循Darren的解决方案并且有效。

$(function () {

    $('#popLinks').popover({
        html: true,
        trigger: 'manual',
        animation: true
    });

    $('#popLinks').click(function () {
        $(this).popover('show');
        setTimeout(function () {
            $('.popover').fadeOut('slow');
        }, 3000);
        e.preventDefault();
    });    
});

答案 4 :(得分:0)

确保popover只会被初始化一次。如果它将被初始化超过 一次跨越不同的文件,你可能会遇到这个问题。

$table->integer('idMember');

答案 5 :(得分:0)

我在上面使用了达伦的答案。对不起Darren,我仍然无法评论其他人的帖子。 虽然有一点变化。我将'show'更改为'toggle'以便能够切换弹出框。

自:

$(this).popover('show');

$(this).popover('toggle');

答案 6 :(得分:0)

只需使用此:

$('[data-toggle="popover"]').popover();

代替:

this

答案 7 :(得分:0)

我使用以下代码行解决了该问题:

说明:使用 show.bs.popover 事件

在显示新弹出窗口之前将其隐藏

重要!不要使用$('。popover')。hide();除非您单击两次,否则将阻止显示弹出窗口,而是使用$('element')。popover('hide')

reset

在出现多个弹出窗口时也可以使用。