【发布时间】:2016-02-20 10:01:21
【问题描述】:
我有一个 Bootstrap 弹出框,其中包含一个带有 JS 的元素,当单击该元素时,使用 Bootstrap 网站上显示的手动方法关闭弹出框,即
$('#element').popover('hide')
但是,它需要在弹出窗口打开的元素上单击两次才能重新打开它。就好像它仍然认为弹出窗口正在显示,所以第一次单击是关闭它,第二次单击然后再次打开它。有谁知道如何使用 JS 正确关闭弹出框以避免这种情况?我创建了以下小提琴来演示该问题。
http://jsfiddle.net/fxqzn4xd/1/
非常感谢。
更新:此问题与提议的问题不重复
一如既往地感谢 SO 社区保持这个地方的整洁和相关。但是,这不是所提出问题的重复。该问题的问题是弹出框没有初始化直到第一次点击。因此,第一次点击并没有打开弹出框,而是对其进行了初始化,因此第二次和所有后续点击都可以正常工作。
这不是我发现的问题。弹出框在页面加载时初始化,所以我的第一次点击确实打开了弹出框。使用手动 .popover('hide') 方法关闭时,第二次单击将不起作用。即在我的场景中,所有其他点击都有效。这些是由不同的问题引起的不同的问题。链接帖子中的问题是在第一次点击之前初始化弹出框,我已经这样做了。
我报告了我在 GitHub 上的 twbs bootstrap 项目中发现的问题,结果发现这是一个已知错误,最早于 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 同意:这是新提出的“重复”问题的副本。看起来提问者在我之前遇到了这个问题!我将把问题留在这里,但很明显我(和其他人)在寻找时没有找到那个问题,所以希望它能有所帮助。
【问题讨论】:
-
您没有将弹出框内容放在“显示”按钮上的数据内容变量中吗?
-
是的:在小提琴上,只是为了让它与真实网站相似。在真实站点上,这是因为弹出内容包含 html 和动态加载的内容,这似乎无法使用 data-content 属性。将其从页面上的隐藏元素中移出的 JS 最初是从引导站点获取的,但是在关闭弹出窗口后将其复制回来的技巧意味着元素仍然存在,并且下次弹出窗口打开时,它不会重新创建。
-
您可以在设置弹出框时或稍后通过 $("#popover").popover({ html: true, content: "dynamic content here!" 指定弹出框的 html 或动态内容! });它对双击问题没有帮助,但仅供参考:)
-
同样感谢!
标签: javascript twitter-bootstrap