web-dev-qa-db-ja.com

自動非表示bootstrapポップオーバー

Bootstrap popoversを数秒後に自動的に非表示にしたい。ユーザーがコントロールにカーソルを合わせると、popoverが表示されなければならないが、ユーザーがマウスポインターを動かさない場合、このpopoverは数秒後に自動的に非表示にする必要があります。

携帯電話やタブレットでは、ユーザーがコントロールをタップするとポップオーバーが表示され、ユーザーが何かを入力している間、フォーカスは同じコントロールに留まり、ポップオーバーがそれを妨げるため、これは重要です。

17
Gonzalo

あなたは本当にそれを試して、助けを求める前にあなたのコードを投稿するべきです。これは機能しますが、より効率的な方法があるかもしれません:

$('.pop').popover().click(function () {
    setTimeout(function () {
        $('.pop').popover('hide');
    }, 2000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

<span class="pop" data-original-title="My popover" data-content="Isn't it great?">Click me</span>

http://jsfiddle.net/isherwood/Bqq7C/27/

35
isherwood

受け入れられた答えは問題なく機能しますが、より多くのbootstrapアプローチがあります:

元の回答

$('.pop').on('shown.bs.popover', function () {
    var $pop = $(this);
    setTimeout(function () {
        $pop.popover('hide');
    }, 2000);
});

linplashからの更新

この回答は、1つの重要な情報を見逃しています!!ポップオーバーの初期化中にトリガーオプションを追加する必要があります。

$("#element").popover({ trigger:"manual" }).click(function() { 
  var pop = $(this); 
  pop.popover("show") 
  pop.on('shown.bs.popover',function() { 
   setTimeout(function() {
    pop.popover("hide")}, 2200); 
  }) 
})
17
Adrian Enriquez

次のように、独自の新しいデータ属性をポップオーバーに追加することもできます。

$('[data-toggle="popover"][data-timeout]').on('shown.bs.popover', function() {
    this_popover = $(this);
    setTimeout(function () {
        this_popover.popover('hide');
    }, $(this).data("timeout"));
});

今、あなたは使うことができました

<span 
    data-toggle="popover" 
    data-timeout="2000" 
    title="A title" 
    data-content="Some explanatory text">
    Your text
</span>

データタイムアウトで指定したミリ秒数が表示された後、ポップオーバーは消えます。

3
Roel Vermeulen