Bootstrap popover手动关闭需要两次单击才能重新打开

时间:2015-11-18 15:24:47

标签: javascript twitter-bootstrap

我有一个Bootstrap popover,其中包含一个JS元素,点击后,使用Bootstrap网站上显示的手动方法关闭popover,即

$('#element').popover('hide')

然而,它需要两次点击弹出窗口的元素才能重新打开它。这就好像它仍然认为弹出窗口正在显示,所以第一次点击是切换它关闭,然后第二次点击然后再次打开它。有谁知道如何使用JS正确关闭弹出窗口以避免这种情况?我创造了以下小提琴来演示这个问题。

http://jsfiddle.net/fxqzn4xd/1/

非常感谢。

更新:此问题与提议的问题不重复

一如既往地感谢SO社区保持整洁和相关的地方。但是,这不是拟议问题的重复。这个问题的问题是弹出窗口没有初始化直到第一次点击。因此,第一次点击没有打开弹出窗口,但是初始化它以便第二次和所有后续点击都有效。

这不是我发现的问题。弹出窗口是在页面加载时初始化的,所以我第一次单击 打开弹出窗口。使用手动.popover('hide')方法关闭时,第二次单击则不起作用。即每个其他点击在我的场景中有效。这些是由不同问题引起的不同问题。链接帖子中的问题是在第一次点击之前初始化弹出窗口,我已经这样做了。

我报告了我在GitHub上的twbs bootstrap项目中发现的问题,结果发现这是一个已知的bug,在7月份的3.3.5版中首次报道。它有一个3.3.6的里程碑修复但是下滑(最近出现了3.3.6),现在有3.3.7的里程碑。关于Github的详细信息:

Calling .popover('hide') prevents popover from open on next click #18860

好消息是,有一个简单的解决方法可以在等待它提交到3.3.7时应用。我会将其作为解决方案发布。

更新2 同意:这是新提出的“重复”问题的副本。看起来问问者在我面前遇到了这个问题!我会在这里留下这个问题,但很明显我(和其他人)在寻找时并没有找到那个,所以希望它可以提供帮助。

3 个答案:

答案 0 :(得分:9)

感谢GitHub用户' julesongithub'提供此解决方法。使用.popover(' hide')将其与您想要关闭的popover放在同一页面上解决了这个问题。基本上它通过重置“inState.click”来实现。隐藏方法没有做的popover的变量。

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

答案 1 :(得分:9)

我使用的解决方法是触发弹出窗口的元素上的click()函数,原因如下:你只想隐藏'弹出窗口时显示弹出窗口,显示弹出窗口的元素也是隐藏它的元素。话虽这么说,click()会让它消失。而不是

$('#element').popover('hide')

我用

$('#element').click()

到目前为止效果很好......

答案 2 :(得分:4)

我通过在实例化弹出窗口时更改触发器选项来修复此问题。

$('#element').popover({ trigger: 'manual' });

请注意,此选项要求您同时显示隐藏弹出框。

Source Thread

More popover options