Javascript 关闭通过委派创建的所有打开的引导弹出窗口
我有一个引导弹出窗口的场景(版本2.3,尽管我也可以在版本3中重新创建该问题),其中页面上有多个弹出窗口,我希望在打开新的弹出窗口时能够关闭任何打开的弹出窗口 我使用的关闭打开的弹出窗口的方法(取自)工作正常,直到我使用代理弹出窗口对象的Javascript 关闭通过委派创建的所有打开的引导弹出窗口,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,我有一个引导弹出窗口的场景(版本2.3,尽管我也可以在版本3中重新创建该问题),其中页面上有多个弹出窗口,我希望在打开新的弹出窗口时能够关闭任何打开的弹出窗口 我使用的关闭打开的弹出窗口的方法(取自)工作正常,直到我使用代理弹出窗口对象的选择器选项初始化弹出窗口 以下是JS: // Works if popovers are instantiated this way //$("[data-toggle=popover]").popover(); // Doesn't work if popo
选择器
选项初始化弹出窗口
以下是JS:
// Works if popovers are instantiated this way
//$("[data-toggle=popover]").popover();
// Doesn't work if popovers are instantiated this way
var options = { selector: '[data-toggle=popover]' };
$(".container").popover(options)
$("[data-toggle=popover]").click(function() {
$("[data-toggle=popover]").not(this).popover('hide');
});
以及HTML:
<div class="container">
<a href="#" class="btn btn-large btn-danger" data-toggle="popover" title="" data-placement="bottom" data-content="And here's some amazing content. It's very engaging. right?" data-original-title="Popover Title">Click to see my popover.</a>
<a href="#" class="btn btn-large btn-danger" data-toggle="popover" title="" data-placement="bottom" data-content="And here's some amazing content. It's very engaging. right?" data-original-title="Popover Title">Click to see my popover.</a>
</div>
线路
if(!data)$this.data('bs.popover',(data=new popover(this,options))
最初使用选择器
选项初始化popover时,将数据属性添加到.container
,但在
$(“[data toggle=popover]”。不是(this.popover('hide')代码>
调用它时,它循环遍历与$(“[data toggle=popover]”
选择器匹配的每个元素,并在找到的每个元素上重新初始化一个popover,忽略一个事实,即popover对象已添加到父容器中,并使用选择器选项通过委托设置为工作。有什么方法可以避免这种情况吗?在我看来,最简单也是最好的方法是使用
而不是你的Javascript隐藏了其他弹出窗口,效果很好。。。但是你忘了打开新的
var options = { selector: '[data-toggle=popover]' };
$(".container").popover(options);
$("[data-toggle=popover]").click(function() {
$("[data-toggle=popover]").not(this).popover('hide');
$("[data-toggle=popover]").this.popover('show');
});
披露:我实际上不知道我在做什么,但当我检查引导文档并在Bootply中运行此程序时,它似乎创建了您所寻找的行为
不错!不幸的是,在这种情况下,我无法将我的锚切换到按钮,因此这种方法似乎不起作用。我添加了一个维护锚的解决方案。这实际上会在控制台中导致错误,因为$(“[data toggle=popover]”)。这是未定义的。但是,它让我想到了使用$(“[data toggle=popover]”)。filter(this)。popover('show'),它确实有效。这种方法仍然存在一个问题,我将更新我的问题以反映出来。这个解决方案似乎有效,因为javascript抛出错误并中途停止工作。但这意味着该行之后的任何其他javascript也不会被触发。
var options = { selector: '[data-toggle=popover]', trigger: 'focus' };
$(".container").popover(options);
<div class="container">
<button class="btn btn-large btn-danger" data-toggle="popover" title="" data-placement="bottom" data-content="And here's some amazing content. It's very engaging. right?" data-original-title="Popover Title">Click to see my popover.</button>
<button class="btn btn-large btn-danger" data-toggle="popover" title="" data-placement="bottom" data-content="And here's some amazing content. It's very engaging. right?" data-original-title="Popover Title">Click to see my popover.</button>
</div>
var options = { selector: '[data-toggle=popover]' };
$("body").popover(options)
$("[data-toggle=popover]").on('shown.bs.popover', function(e) {
$(this).addClass('shown');
});
$("body").on('click', '[data-toggle=popover]', function(e) {
$('.shown').not(this).popover('hide').removeClass('shown');
});
var options = { selector: '[data-toggle=popover]' };
$(".container").popover(options);
$("[data-toggle=popover]").click(function() {
$("[data-toggle=popover]").not(this).popover('hide');
$("[data-toggle=popover]").this.popover('show');
});