【问题标题】:How to hide Bootstrap 3 popover when another popover is shown?显示另一个弹出窗口时如何隐藏 Bootstrap 3 弹出窗口?
【发布时间】:2018-09-12 14:54:58
【问题描述】:

我在标签悬停时使用工具提示,但这不能在移动设备上使用,因此我决定使用点击时弹出框(移动设备的 touchstart)而不是桌面工具提示。这个技巧我在这里找到的:https://codepen.io/sharperwebdev/pen/mJYRNN

我稍微更改了我的代码,因为我希望当用户点击标签时,弹出框只会显示 1 秒。 问题是这不能完美地工作。因为当用户点击同一个标签或快速点击多个标签时会出现一些延迟问题。

我还尝试在显示新弹出框时隐藏所有其他弹出框,但它不起作用。
函数.popover('hide') 对我不起作用。所以我忘记了。

这是我的代码:

$( function () {
  var toolBox = $('[data-toggle="tooltip"]'); 
  toolBox.popover({
    template: '<div class="popover ps-popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'              
  }).on('click touchstart', function(e) {
  setTimeout(function() {
   $('[data-toggle="tooltip"]').popover('hide');  $('.ps-popover').fadeOut('slow');     //hide popover after 1s
  }, 1000);
  });
})

您可以在这里查看结果:https://codepen.io/cutis/pen/qMYrOq

【问题讨论】:

  • 你能说出具体的问题吗?
  • 我希望当用户点击标签时,弹出框只会显示 1 秒。问题是这不能完美地工作。当用户单击同一个标签或快速单击多个标签时会出现一些延迟问题。或者有时,用户需要点击两次才能看到弹出框
  • 检查这个:codepen.io/cutis/pen/qMYrOq。当您第一次单击它时。但之后,你需要点击两次才能工作

标签: javascript jquery twitter-bootstrap-3 popover bootstrap-popover


【解决方案1】:

如果您想手动隐藏和显示弹出框,请在弹出框配置中设置“触发器:手动”。

除此之外,没有理由单独淡出弹出框,正确调用 hide() 应该自己做到这一点。

这是一个工作示例:https://codepen.io/anon/pen/XPqgQr?editors=1011

$( function () {

  var allTextsWithTooltip = $('[data-toggle="tooltip"]'); 

  allTextsWithTooltip.popover({
    template: '<div class="popover ps-popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>',
    trigger: "manual"
  }).on('click touchstart', function(e) {
    $(this).popover('show');

    setTimeout(() => {
      $(this).popover('hide'); 
    }, 1000);
  });  
})

【讨论】:

  • 是的,它似乎可以工作,但在我的项目中,我无法让“popover('hide')”工作。我认为这是由于 Jquery 原型和变量范围造成的,但我不知道如何解释好。我检查了这个stackoverflow.com/questions/17968951/…,但我无法让 popover('hide') 工作。当我成功重现 codepen 项目的错误时,我会回来。
  • 最后我使用 ** $('.ps-popover').remove(); ** 我在这里找到了这个技巧:stackoverflow.com/questions/21190385/…。但我真的很想明白,为什么我会得到这个错误。不幸的是,由于专业原因,我不能不分享我所有的代码。而且我也无法重现该错误。无论如何感谢您的帮助!
【解决方案2】:

使用data-trigger="focus" 并添加click 事件和setTimeout https://getbootstrap.com/docs/3.3/javascript/#popovers 的最简单方法

$(function () {
  var timeout;
  $('[data-toggle="popover"]').popover().click(function () {
    clearTimeout(timeout);
    timeout = setTimeout(function () {
        $('[data-toggle="popover"]').popover('hide');
    }, 1000);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

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

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

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

【讨论】:

  • 有效,但实际上并没有使弹出窗口在 1 秒后消失,这正是 OP 正在寻找的
  • @RobertPurcea 更新!现在在 1 秒后自动隐藏
  • .popover('hide') 对我不起作用。最后,我使用原生 jquery stackoverflow.com/questions/21190385/… 中的这个技巧“.remove()”。还是谢谢
猜你喜欢
  • 2022-12-31
  • 1970-01-01
  • 2014-02-21
  • 2018-02-16
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多