2013-10-30 15 views
5

Popoverleri içeren bir web sayfasına dinamik olarak yüklenen bazı içeriklerim var. Bu nedenle onları vücuda bağlamaları ve doğru şekilde yerleştirilmeleri gerekiyor.Kullanıcı Açılır Pencereyi Dışa Aktardı Bootstrap Popover'ı Kapatma

Kullanıcı, popover'ı veya başka bir popover tetikleyicisinin dışını tıkladığında pop'leri gizlemenin bir yolunu bulmak istiyorum.

Popover'i "gizler" olsaydım, popover gerçekten gizlenir, ancak öğeler DOM'ta kalır. Bu, popover'daki aktif bağlantıların "tıklanabilir" kalması anlamına gelir.

Bunun yerine popover'ı yok edersem gizler, ancak tıklandığında yeniden etkinleştiremez. Popover'ı gizlemenin tek güvenilir yolu "toggle" kullanmaktır. Bu, hangi popovların saklanacağını belirleme karmaşıklığını arttırır. Tüm bu kod ile this JSFiddle'a bakın.

HTML

<a href="#" data-toggle="popover" data-original-title="" data-content="<a href='http://www.yahoo.com'>http://www.yahoo.com</a>" class="some-popover-link">Yahoo</a> 
<br><br> <br> <br> <br> <a href="#" data-toggle="popover" data-original-title="" data-content="<a href='http://www.google.com'>http://www.google.com</a>" class="some-popover-link">Google</a> 
<br><br> <br> <br> <br> <a href="#" data-toggle="popover" data-original-title="" data-content="<a href='http://www.microsoft.com'>http://www.microsoft.com</a>" class="some-popover-link">Microsoft</a> 

JavaScript

$('.some-popover-link').popover({ 
    container: 'body', 
    html: true, 
    placement: 'bottom' 
}); 

$(document).click(function (e) { 
    $('.some-popover-link').each(function() { 
     if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) { 
      $(this).popover('hide'); // this hides popover, but content remains 
      return; 
     } 
    }); 
}); 
+1

JSFiddle Link sizin keman doğru iş gibi gözüküyor .. Ya da keman sorunu gösteren gelmez ve ben sadece onu göremiyorum? – Trevor

+0

Keman, poporatörlerin beklendiği gibi saklandığını, ancak div.popover'ın DIV'den kaldırılmadığını gösterir. Pop-up içindeki bağlantının nerede olduğunu fark ederseniz, yine de bir web sitesine tıklar. Diğer tarayıcılarda da deneyeceğim. – arcdegree

+0

Ahh Neler olduğunu görüyorum. @kraxor'un bir çözümü var gibi görünüyor. Bunu denediniz mi? – Trevor

cevap

8

yüzden dikkatli olun ama çalışması gerekir.

if ($(this).data('bs.popover').tip().hasClass('in')) { 
    $(this).popover('toggle'); 
} 
+0

İyi görünüyor, teşekkürler! – arcdegree

+0

Çok teşekkürler. İpucu() çağırmadan önce $ (this) .data ('bs.popover') 'ı kontrol etmem gerekiyordu, ama ti sorunu çözüyor! – bla

+0

Bu sadece benim için işe yarıyor. Dışarıya tıklarsam veya başka bir popover tıklarsam popoverler kaybolur, ancak aynı popover'i tekrar tıkladığımda sadece ikinci tıklamada görünür. Niye ya? '( ($ (this) alt sının ise (e.target) && $ (this) .has (e.target) .length === 0 && $: Benim için – Moha

6

bunu kullanın kodu: Bu iç uygulanmasına dayanır

$(document).mouseup(function (e) { 
    if ($('.popover').has(e.target).length === 0) { 
     $('.popover').toggleClass('in').remove(); 
     return; 
    } 
}); 
+0

Bir kullanıcı bir popover dışına tıkladığında çalışır, ancak kullanıcı popover bağlantısını tekrar tıklatırsa, popover gizlenmez. – arcdegree

İlgili konular