【问题标题】:Bootstrap .popover() 'show' & 'destroy' not working properlyBootstrap .popover() 'show' & 'destroy' 无法正常工作
【发布时间】:2014-01-17 16:03:46
【问题描述】:

当我在“手动”模式下使用引导弹出框时,“销毁”和“隐藏”无法正常工作。 当我使用隐藏和销毁时,弹出框不透明度更改为 0,但它没有将显示更改为无,这导致弹出框容器覆盖了它下面的内容。 否则,如果我使用“toogle”模式,它会正常工作。

我的代码:

$('[rel="popover"]').popover({
    html: true,
    placement: 'auto',
    container: 'body',
    trigger: 'manual'
});

$('body').on('click' , '[rel="popover"]' , function(e){
    e.stopPropagation();
    $(this).popover('toggle');
});

$('body').on('click' , '.popoverClose' , function(e){
    e.stopPropagation();
    var i = $(this);
    $('.inputInfo').filter('[data-info-id="' +i.data('info-id')+ '"]').popover('hide');
});

// new code
$('body').on('click', function(){
    $('[rel="popover"]').popover('hide');
});

【问题讨论】:

    标签: javascript jquery twitter-bootstrap


    【解决方案1】:

    我的临时解决方案如下所示:

    我正在使用:

    $('.popover').remove();
    

    删除弹出框

    $('body').on('click' , '[rel="popover"]' , function(e){
        e.stopPropagation();
    
        var i = $(this);
        var thisPopover = $('.popoverClose').filter('[data-info-id="' +i.data('info-id')+ '"]').closest('.popover');        
        if( thisPopover.is(':visible') ){
            $('.popover').remove();
        }
        else{
            $(this).popover('show');
        }
    });
    

    切换弹出框

    【讨论】:

    • 如果我实现 $(".popover").remove(),那么点击元素时弹出框不会出现。只有当我点击外部然后点击元素时它才会出现。有什么解决方法吗?
    • @sms 这个问题是 2 年前提出的,我相信您应该提出新问题,因为较新版本的 Bootstrap 的解决方案可能会有所不同。
    【解决方案2】:

    如果您使用的是自定义构建的 Bootstrap,如果您没有在 JS 部分中选中“transitions”并且在支持转换的浏览器中进行测试,那么 destroy 事件将不起作用。这是因为 Bootstrap 在 jQuery 中查看 $.support.transition。如果这个值是“真实的”,Bootstrap 假定会有某种类型的 transitionEnd 事件,并且在收到这个事件之前不会分离弹出框。但是 Bootstrap 使用在其转换库中定义的自定义事件,因此永远不会触发 transitionEnd 调用。如果不想重新下载自定义库,转场代码在这里:transition code

    【讨论】:

      【解决方案3】:

      如果您想隐藏弹出框,请改用:

      $('.inputInfo').filter('[data-info-id="' +i.data('info-id')+ '"]').click();
      

      【讨论】:

      • 是的,我会在这种情况下工作,但是当我想隐藏网站中的所有弹出框时,例如当我点击身体?这将显示所有隐藏的弹出窗口并隐藏所有可见的......
      • 看起来这就是你想要使用切换来做的事情
      • 不完全是,我想在关闭它时使用切换,但是当我单击任何其他网站元素时,我希望隐藏所有弹出窗口(我在上面添加了新代码),在这种情况下它是不工作
      • 您是否尝试在新代码中将 .popover('hide') 更改为 .click()?
      • 是的,我尝试添加$('body').on('click', function(){ $('[rel="popover"]').click(); });,效果是,可见的弹出框被隐藏并显示。
      【解决方案4】:

      用于引导弹出窗口的工作

      <span class="pop-target">
            <a href="javascript:void(0);" rel="popover"........> </a>
          </span>
      
      
      
        $(".pop-target a").popover('hide');
      

      【讨论】:

        【解决方案5】:

        我已经通过在 css 文件中添加它来修复它:

        .popover.fade{z-index:-1;}
        
        .popover.in{z-index: inherit}
        

        【讨论】:

          【解决方案6】:
          //Works for hover events:
          
          $('[data-toggle="popover"]').popover();
          $('[data-toggle="popover"]').mouseleave(function(e) {
              e.stopPropagation();
              $(this).find('.popover').remove();
           });
          

          【讨论】:

          • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-17
          • 2015-01-30
          • 2023-03-28
          • 1970-01-01
          • 1970-01-01
          • 2019-07-14
          相关资源
          最近更新 更多