【问题标题】:Popover delay at bootstrap doesnt work引导时的弹出延迟不起作用
【发布时间】:2013-10-24 05:25:51
【问题描述】:

我希望弹出框在一段时间后隐藏。我编写了这个 -> CODE work..

JS

$('#qoo').popover({
    placement : 'left',
    html : true,
    delay: { 
             show: 500, 
             hide: 100
    },
    content: function() {
    return $('#content-wrapper1').html();
}                 

});

HTML

<div class="span1 offset1">
     <a href="#" id="qoo" rel="popover" data-original-title="TITLEEEE" class="circle"> textttt</a>
     <div id="content-wrapper1" class="content-wrapper"> texttttttat</div> 
</div>

但它不起作用。

【问题讨论】:

    标签: jquery twitter-bootstrap popover


    【解决方案1】:

    延迟显示/隐藏不会自动显示/隐藏弹出框,它定义了延迟之前这样做!另外,delay does not apply to manual trigger type,所以你必须有一个触发器,比如hover。让延迟发挥作用。

    $('#qoo').popover({
        placement : 'right',
        html : true,
        trigger : 'hover', //<--- you need a trigger other than manual
        delay: { 
           show: "500", 
           hide: "100"
        },
        content: function() {
            return $('#content-wrapper1').html();
        }
    });
    

    但是,要实现弹出框的自动隐藏,您可以通过挂钩shown.bs.popover 事件来执行以下操作:

    $('#qoo').on('shown.bs.popover', function() {
        setTimeout(function() {
            $('#qoo').popover('hide');
        }, 1000);
    });
    

    上面隐藏了 1000 毫秒,1 秒后的弹出窗口。

    【讨论】:

    • 不错@davidkonrad !当我阅读“延迟不适用于手动触发类型”时,我想到了相反的情况。但是,在悬停时它可以正常工作,但是如果我放了一个触发器:“点击”它就不起作用..
    • @yaylitzis,它在这里使用点击作为触发器(至少延迟)
    • @yaylitzis - 不(!!)延迟有效,但弹出窗口没有隐藏。而这从来都不是本意。 hide:100 只是定义了点击后,弹出框会在100ms后隐藏,例如延迟隐藏100ms。要自动隐藏弹出框,一定时间后,您必须使用上面的超时方法。显示/隐藏仅定义“效果”或延迟,而不是动作本身!从逻辑上看——如果你相信的是真的,那么“show:500”应该在 500 毫秒后显示弹出框——对吗?引导文档有时有点模糊或混乱。
    • 谢谢。令人遗憾的是,当手动触发弹出框时,内置延迟不起作用。是不是只有我一个觉得使用 setTimout 不太一样?
    • @sparkyShorts,所以?在哪个版本的引导程序中,以及哪个设置?随意提出更好的答案。
    【解决方案2】:

    我的解决方案:仅当用户将鼠标悬停在链接上一定时间时才会打开弹出框。

    $('.popMonster').popover({
        html: true,
        trigger: 'manual',
        delay: { 
            show: 100, 
            hide: 0
        },
        container: $(this).attr('id'),
        placement: 'auto',
        content: function () {
            $return = '<div class="hover-hovercard"></div>';
        }
    }).on("mouseenter", function () {
    
        var delay_ = (function(){
            var timer_ = 0;
            return function(callback, ms){
                clearTimeout (timer_);
                timer_ = setTimeout(callback, ms);
            };
        })();
    
        var self = $(this), url = '/myurl/action';
    
        delay(function(){
            // Get content via ajax:
            $.get(url, function(data) {
                if(data == 'Unauthorized.'){
                    location.href = './';
                }else{
                    self.attr('data-content', data);
                    self.popover("show");
                }
            });
        }, 800 ); // time to wait before call ajax
    
        self.siblings(".popover").on("mouseleave", function () {
            self.popover('hide');
        });
    
    })
    

    【讨论】:

      【解决方案3】:

      我已经尝试过您的代码,您的代码中的问题是工具提示似乎没有绑定在正文中,它实际上是在正文之外,所以如果您为元素留出边距,您将能够让它正常工作。看看这个:

      JSFiddle

      HTML:

      <div class="span1 offset1" style="margin:100px">
           <a href="#" id="qoo" rel="popover" data-original-title="TITLEEEE" class="circle"> textttt</a>
           <div id="content-wrapper1" class="content-wrapper"> texttttttat</div> 
      </div>
      

      JS:

      $('#qoo').popover({
          placement : 'right',
          html : true,
          delay: { 
                   show: 500, 
                   hide: 500
          },
          content: function() {
          return $('#content-wrapper1').html();
      }                 
      
      });
      

      【讨论】:

      • @yaylitzis 必须参考 jsfiddle 并尝试编辑显示和隐藏值,它正在工作!!
      猜你喜欢
      • 2015-02-24
      • 2019-09-06
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      相关资源
      最近更新 更多