【问题标题】:How to keep popover alive while being hovered [for dynamic elements]如何在悬停时保持弹出框活着[对于动态元素]
【发布时间】:2016-08-09 14:45:40
【问题描述】:

我有以下代码成功地将弹出框添加到动态元素:

var selection = "http://www.google.com/images/srpr/logo3w.png";
var image = '<img src="' + selection + '" />';
var previewLink = '<a class="show-popover" href="#" rel="popover" >(Hover to Preview)    </a>';

$('#headerBlock').append(previewLink);

$('body').popover({
     selector: '.show-popover',
     title: 'test',
     content: image,
     trigger: 'hover'
});

但是,我无法在悬停时使弹出框保持活动状态。以下是我的代码,但它不起作用:

$(".show-popover").popover({
     trigger: "manual",
     html: true,
     animation: false
  })
  .on("mouseenter", function() {
     var _this = this;
     $(this).popover("show");
     $(".popover").on("mouseleave", function() {
         $(_this).popover('hide');
     });
 }).on("mouseleave", function() {
    var _this = this;
    setTimeout(function() {
       if (!$(".popover:hover").length) {
           $(_this).popover("hide");
       }
    }, 300);
});

这里是 JSFIDDLE:http://jsfiddle.net/KAvAZ/124/

有什么帮助吗?

【问题讨论】:

    标签: javascript jquery twitter-bootstrap popover


    【解决方案1】:

    这是我对这个问题的回答(希望有一天能对其他人有所帮助):http://jsfiddle.net/KAvAZ/127/

    我需要做的是在应该显示弹出窗口的链接的mouseenter 事件中调用popover 方法。由于我需要覆盖动态元素(即加载DOM后添加),我使用on方法:

        var selection = "http://www.google.com/images/srpr/logo3w.png";
        var image = '<img src="' + selection + '" />';
        var previewLink = '<a class="show-popover" href="#" rel="popover" >(Hover to Preview)    </a>';
        $('#headerBlock').append(previewLink);
    
    
        $('body').on("mouseenter", '.show-popover', function() {
          var _this = this;
    
          $(this).popover({
            html: true,
            content: function() {
              return "Content";
            },
            title: function() {
              return "Title";
            }
          });
    
          $(this).popover("show");
          $(".popover").on("mouseleave", function() {
            $(_this).popover('hide');
          });
        }).on("mouseleave", function() {
          var _this = this;
          setTimeout(function() {
            if (!$(".popover:hover").length) {
              $(_this).popover("hide");
            }
          }, 300);
        });
    

    【讨论】:

    • 当光标离开链接“(Hover to Preview)”并且不在弹出框内时,是否可以隐藏弹出框?
    【解决方案2】:

    试试这个

    var selection = "http://www.google.com/images/srpr/logo3w.png";
    var image = '<img src="' + selection + '" />';
    var previewLink = '<a class="show-popover" href="#" rel="popover" >(Hover to Preview)    </a>';
    $('#headerBlock').append(previewLink);
    $('body').popover({
      selector: '.show-popover',
      title: 'test',
      content: image,
      trigger: 'hover'
    }).on("mouseenter", ".show-popover", function() {
        var _this = this;
        console.log("show")
        $(this).popover("show");
        $(".popover").on("mouseleave", function() {
            console.log("hide")
          $(_this).popover('hide');
        });
      }).on("mouseleave", ".show-popover", function() {
        var _this = this;
        setTimeout(function() {
          if (!$(".popover:hover").length) {
            console.log("time out")
            $(_this).popover("hide");
          }
        }, 300);
      });
    

    弹窗是建立在body上的,所以$(".show-popover")不能触发.popover("hide/show")

    您需要将鼠标事件绑定到 body 以使其触发正确的 DOM 对象

    【讨论】:

    • 感谢您的回答!但是,它似乎不起作用:jsfiddle.net/KAvAZ/125
    • 那么你的问题是什么?悬停时的弹出框显示。
    • “如何在弹出框为动态元素悬停时保持弹出框活动”
    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多