【问题标题】:How can I toggle all my Bootstrap Popovers by clicking on another button?如何通过单击另一个按钮来切换我的所有 Bootstrap 弹出框?
【发布时间】:2015-09-29 16:50:02
【问题描述】:

我有一些引导弹出按钮:

<div class="bs-example tooltip-demo">
    <div class="bs-example-tooltips">
        <button type="button" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." data-original-title="" title="">Popover on top</button>

        <button type="button" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." data-original-title="" title="">Popover on bottom</button>

        <button type="button" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." data-original-title="" title="">Popover on right</button>
    </div>
</div>
<br><br>
   <button id="toggle" class="btn btn-default" >Toggle all</button>

这里是脚本:

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


$('#toggle').on('click', function (e) {
    $('[data-toggle="popover"]').each(function () {

        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('toggle');
        }
    });
});

$('body').on('click', function (e) {
    $('[data-toggle="popover"]').each(function () {

        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('hide');
        }
    });
});

所以我想要实现的是:

  • 通过单击弹出框按钮本身:什么都不做(无弹出框)
  • 点击Toggle all切换所有弹出框
  • 通过点击body隐藏所有Popovers

在我的代码中它不起作用,也许与隐藏和切换有冲突?

这里是小提琴:https://jsfiddle.net/C5GBU/1421/

【问题讨论】:

    标签: jquery twitter-bootstrap


    【解决方案1】:

    假设您只希望最后一个按钮切换页面上的所有弹出框,那么您需要做的就是:

    $('#toggle').on('click', function() {
        $('[data-toggle="popover"]').popover('toggle');
    });
    

    此外,如果您单击任何不是弹出框或切换弹出框的按钮,此代码将隐藏所有弹出框:

    $('html').on('mouseup', function(e) {
        if(typeof $(e.target).data('toggle') === "undefined" 
           && $(e.target).attr('id') != 'toggle') {
            $('[data-toggle="popover"]').popover('hide');
        }
    });
    

    您的小提琴已更新:https://jsfiddle.net/C5GBU/1426/

    【讨论】:

    • 您好,谢谢!不,这不是最后一个按钮,而且如果我单击弹出按钮本身,我不想要弹出窗口,只需单击“全部切换”
    • 你说的“这不是最后一个按钮”是什么意思,真的不太清楚。要防止按钮显示它自己的弹出框,只需添加手动触发值(例如data-trigger="manual"
    • 好吧,您假设我希望最后一个按钮切换。但这种情况并非如此。我的按钮toggle all 不是页面上的最后一个按钮。为了明确这一点:jsfiddle.net/C5GBU/1425
    • 不,我假设您希望标题为“toggle all”的按钮切换所有弹出框,因为您的问题是“通过单击 Toggle all 切换所有弹出框”。
    • data-trigger="manual"谢谢!这就是我一直在寻找的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多