Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭通过委派创建的所有打开的引导弹出窗口_Javascript_Jquery_Twitter Bootstrap - Fatal编程技术网

Javascript 关闭通过委派创建的所有打开的引导弹出窗口

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

我有一个引导弹出窗口的场景(版本2.3,尽管我也可以在版本3中重新创建该问题),其中页面上有多个弹出窗口,我希望在打开新的弹出窗口时能够关闭任何打开的弹出窗口

我使用的关闭打开的弹出窗口的方法(取自)工作正常,直到我使用代理弹出窗口对象的
选择器
选项初始化弹出窗口

以下是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');
});