当前位置: 首页 > 知识库问答 >
问题:

如何通过点击外部来解除Twitter引导弹出?

闾丘诚
2023-03-14

我们能不能让popover像情态动词一样被解雇。当用户单击它们之外的某个地方时关闭它们?

不幸的是,我不能只使用真实的模态而不是popover,因为模态意味着位置:固定的,那将不再是popover。:(

共有1个答案

满伟彦
2023-03-14

更新:稍微更健壮的解决方案:http://jsfidle.net/mattdlockyer/c5gbu/72/

对于仅包含文本的按钮:

$('body').on('click', function (e) {
    //did not click a popover toggle or popover
    if ($(e.target).data('toggle') !== 'popover'
        && $(e.target).parents('.popover.in').length === 0) { 
        $('[data-toggle="popover"]').popover('hide');
    }
});

对于包含图标的按钮,请使用(此代码在Bootstrap 3.3.6中有一个bug,请参阅以下答案中的修补程序)

$('body').on('click', function (e) {
        //did not click a popover toggle, or icon in popover toggle, or popover
        if ($(e.target).data('toggle') !== 'popover'
            && $(e.target).parents('[data-toggle="popover"]').length === 0
            && $(e.target).parents('.popover.in').length === 0) { 
            $('[data-toggle="popover"]').popover('hide');
        }
    });

对于JS生成的弹出窗口,使用'[data-original-title]'代替'[data-toggle=“popover”]'

警告:上面的解决方案允许一次打开多个弹出窗口。

请一次送一张:

更新:Bootstrap 3.0.x,请参阅code或fiddle http://jsfidle.net/mattdlockyer/c5gbu/2/

$('body').on('click', function (e) {
    $('[data-toggle="popover"]').each(function () {
        //the 'is' for buttons that trigger popups
        //the 'has' for icons within a button that triggers a popup
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            $(this).popover('hide');
        }
    });
});

这处理关闭已打开但未点击或其链接未点击的弹出窗口。

更新:Bootstrap 3.3.6,参见fiddle

修正关闭后需要点击2次才能重新打开的问题

$(document).on('click', function (e) {
    $('[data-toggle="popover"],[data-original-title]').each(function () {
        //the 'is' for buttons that trigger popups
        //the 'has' for icons within a button that triggers a popup
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {                
            (($(this).popover('hide').data('bs.popover')||{}).inState||{}).click = false  // fix for BS 3.3.6
        }

    });
});

更新:利用前面改进的条件,实现了这个解决方案。修复双击和ghost弹出的问题:

$(document).on("shown.bs.popover",'[data-toggle="popover"]', function(){
    $(this).attr('someattr','1');
});
$(document).on("hidden.bs.popover",'[data-toggle="popover"]', function(){
    $(this).attr('someattr','0');
});
$(document).on('click', function (e) {
    $('[data-toggle="popover"],[data-original-title]').each(function () {
        //the 'is' for buttons that trigger popups
        //the 'has' for icons within a button that triggers a popup
        if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
            if($(this).attr('someattr')=="1"){
                $(this).popover("toggle");
            }
        }
    });
});
 类似资料:
  • 我有一些引导弹出按钮: 下面是脚本: 所以我想实现的是: 通过单击弹出按钮本身:不执行任何操作(不弹出) 单击全部切换弹出 单击正文隐藏所有弹出窗口 在我的代码中,它不起作用,也许与隐藏和切换有冲突? 下面是小提琴:https://jsfidle.net/c5gbu/1421/

  • 我正在尝试创建一个 Angular 4 自定义表单控件作为我的日期选择器。我正在使用ngx-bootstrap,到目前为止,我已经使用ngx-bootstrap的输入,日期选择器和弹出框组件设置了这个自定义表单控件。自定义控件打开一个焦点为日期选取器的弹出窗口,但是,我需要能够通过与弹出框内容交互来更改日期,并且在我不与弹出框或输入交互时它应该关闭。我试图跟踪ngx-bootstrap githu

  • 本文向大家介绍如何通过单击iOS中的警报外部来关闭警报?,包括了如何通过单击iOS中的警报外部来关闭警报?的使用技巧和注意事项,需要的朋友参考一下 理解和实现UIAlert可能会很棘手,特别是如果您不熟悉iOS开发,在这篇文章中,我们将看到当用户在警报框外点击时如何解除警报。 对于此演示,我们将使用UIAlert类,以使用要显示的消息以及可供选择的操作来配置警报和操作表。用所需的动作和样式配置警报

  • 我有一个足够简单的程序: 现在我明白了 错误不会改变,所以我添加了每个https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime/2.3.2的所有编译依赖项: FastInfo-1.2.16。罐子 istack-commons-runtime-3.0.8。罐子 stax-ex-1.8.1。罐子 txw2-2.3.2。罐子

  • 问题内容: 我想通过单击其中的关闭链接 或 单击该div外部的任何位置来隐藏div。 我正在尝试下面的代码,它可以通过单击正确的关闭链接来打开和关闭div,但是如果我在单击div以外的任何位置来关闭它时遇到问题。 问题答案: 另一种使您的jsfiddle减少错误的方法(需要双击打开)。 这不会在主体级别使用任何委托事件 设置为DIV .popup(以及样式CSS )