wyskakujące okienko bootstrap nie wyświetla się na wszystkich elementach


129

Pracuję na stronie bootstrap i po aktualizacji do bootstrap 2.2 z wersji 2.0 wszystko działało z wyjątkiem popover.

Popover nadal pokazuje się dobrze, ale nie pojawiają się nad wszystkimi innymi elementami.

<div> // this sits on top of the popover. this did not happen before cleaning up scripts.
     <div>  //popover shows on top of this
          <div> //popover shows on top of this
               //link here with popover in it.
          </div>
     </div>
</div>

Czy ktoś ma pojęcie, dlaczego zmieniło się zachowanie popovera lub jak mogę to naprawić? Dzięki.

Odpowiedzi:


367

Udało mi się rozwiązać problem, ustawiając data-container="body"element html

HTML przykład:

<a href="#" data-toggle="tooltip" data-container="body" title="first tooltip">
    hover over me
</a>

JavaScript przykład:

$('your element').tooltip({ container: 'body' }) 

Znalezione pod tym linkiem: https://github.com/twitter/bootstrap/issues/5889


18
To naprawdę pomogło. Wprowadziłem następującą zmianę w inicjalizacji popover i zadziałało: $ ('# element'). Popover ({container: 'body', // inne parametry});
Pawan Pillai,

Mam 404 dla tego łącza. Zaktualizuj, proszę?
NoBrainer

3
@NoBrainer Wydaje się, że nie można znaleźć do niego nowego linku, ale dodanie data-container = "body" do elementu html powinno działać lub przekazanie kontenera: „body” przez JavaScript powinno również działać
Kyle

dodanie data-container = "body" wydaje się działać również w bootstrapie 3 w przypadku podpowiedzi, gdy są na przykład przepełnione
bulanmaster

1
Chociaż rozwiązuje to pierwotny problem z indeksem Z, popover nie trzyma się oryginalnego elementu wyzwalającego po rozpoczęciu przeciągania rzeczy po ekranie, powiększania lub pomniejszania lub zmiany rozmiaru okna. Sam szukam lepszej odpowiedzi na to pytanie.
MSC

45

To działa dla mnie

$().popover({container: 'body'})

1
Wielkie dzięki, uratowałeś mnie: D
Vuong Tran

To zadziałało również dla mnie. ważne jest, aby wiedzieć, jaką wartość należy ustawić dla właściwości „kontenera”. Dla porównania, zawartość skopiowana z dokumentu bootstrap popover - „Jeśli masz jakieś style w elemencie nadrzędnym, które kolidują z popover, będziesz chciał określić niestandardowy kontener, tak aby zamiast tego kod HTML popover pojawił się w tym elemencie”.
Nirman

25

Właśnie miałem sytuację podobną do tej, obejmującą bibliotekę DataTables JQuery z włączonym przewijaniem.

Okazało się, że nie ma to nic wspólnego z indeksami Z, ale z jednym z otaczających elementów div, w którym właściwość przepełnienia CSS jest ustawiona jako ukryta.

Naprawiłem to, dodając zdarzenie do mojego elementu wyzwalające popover, co również zmieniło właściwość przepełnienia odpowiedzialnego elementu div na visible.


7
Właśnie uratowałeś 2 godziny mojego życia. Niezmiernie wdzięczny!
Olga Gnatenko

1
Jesteś ratownikiem życia !! Wszystkie odpowiedzi, które przeczytałem, dotyczyły indeksu z i szczerze mówiąc, była to jedyna rzecz, która miała dla mnie sens, ale ostatecznie żadna z sugestii nie zadziałała, dopóki nie zdecydowałem się wypróbować odpowiedzi niezwiązanej z indeksem z! Dzięki
Sebastian

To też był mój problem, wielkie dzięki za zaoszczędzenie mi wielu godzin pracy, ponieważ myślałem, że mój kod jest uszkodzony.
GETah

17

Najbardziej prawdopodobną przyczyną jest to, że zawartość wyświetlana nad popover ma wyższy z-index. Bez dokładnego kodu / stylu mogę zaoferować dwie opcje:

Powinieneś spróbować wskazać dokładne elementy za pomocą inspektora sieci (zwykle F12 w Twojej ulubionej przeglądarce) i sprawdzić ich rzeczywiste z-index.

Jeśli znajdziesz tę wartość można ustawić go niżej niż popover który jest z-index: 1010;domyślnie


Lub innym podejściem, nie tak dobrym, byłoby zwiększenie z-indexpopoveru. Możesz to zrobić za pomocą @zindexPopoverplików w Less lub bezpośrednio, nadpisując

.popover {
    z-index: 1010; /* A value higher than 1010 that solves the problem */
}

Jeśli nie możesz znaleźć rozwiązania, spróbuj odtworzyć błąd w czymś takim jak ten jsfiddle - prawdopodobnie rozwiążesz problem podczas próby znalezienia błędu.


Spróbuję utworzyć jsfiddle i odesłać, jeśli go nie znajdę, ale bez powodzenia próbowałem nadać popoverowi indeks z 9999.
Kyle,

1
dzięki za wskazanie domyślnej wartości indeksu z popover.
Will Tartak,

12

Miałem podobny problem z 2 stałymi elementami - mimo że heirachy z indeksem z były poprawne, podpowiedź bootstrapu była ukryta za jednym elementem z niższym indeksem z.

Dodanie data-container="body"rozwiązało problem i teraz działa zgodnie z oczekiwaniami.


8

Jeśli data-container = "body" nie działa, wypróbuj inne dwie właściwości:

data-container="body" style="z-index:1000; position:relative"

Indeks z powinien być maksymalnym limitem.


5
<div class="testDiv">
<a tabindex = "-1" id="testPop" title="stuff" data-toggle="popover" data-trigger="focus" data-placement="bottom" data-container=".testDiv">
 <i class="fa fa-info-circle"></i>
</a>

</div>

Powyższe odpowiedzi były pomocne, ponieważ ustawienie wartości w kontenerze danych wykonało zadanie, ale jeśli ustawię data-container = "body", w moim przypadku nie zostanie to odpowiednio wyrównane. Więc określiłem klasę nadrzędnego elementu DIV w popover i zadziałało dobrze.

html

data-container = ". testDiv"

js

$ ("# testPop"). popover ({kontener: '.testDiv'})


2

Najlepszym rozwiązaniem, jeśli używasz kątowego uib-bootsrap, jest użycie iniekcji zależności dla $ uibTooltipProvider, możesz zmienić sposób, w jaki domyślnie zachowują się podpowiedzi i okna podręczne dla wszystkich podpowiedzi.

$uibTooltipProvider.options({
  appendToBody: true
});

$ uibTooltipProvider Za pomocą $ uibTooltipProvider można zmienić domyślny sposób działania podpowiedzi i okienek podręcznych; powyższe atrybuty zawsze mają pierwszeństwo. Dostępne są następujące metody:

setTriggers (obj) (Przykład: {'openTrigger': 'closeTrigger'}) - Rozszerza domyślne mapowania wyzwalaczy wspomniane powyżej o własne mapowania.

options (obj) - Zapewnia zestaw wartości domyślnych dla niektórych atrybutów podpowiedzi i popover. Obecnie obsługuje te z odznaką C.


2

Wiele lat później, ale podobnie jak ja, inni mogą tego szukać. Biorąc pod uwagę wszystkie aktualizacje, wszystko to można rozwiązać za pomocą odpowiednich opcji inicjalizacji w JavaScript.

$('.tip').tooltip({
    boundary: 'viewport',
    placement: 'top',
    container:'body',
    sanitize: true,
    appendToBody: true
});

Te ustawienia rozwiązały wszystkie możliwe problemy. Miałem migotanie podpowiedzi, które wyświetlały się poprawnie tylko dla połowy elementów na stronie, przeskakując w sposób ciągły od góry do lewej, wszelkiego rodzaju dziwności. Ale z tymi ustawieniami wszystko jest rozwiązane. Mam nadzieję, że pomoże to każdemu, kto szuka.


i tak, stało się ... Właśnie skopiowałem i wkleiłem i rozwiązałem problemy, które miałem z umieszczaniem popovera na wierzchu ... pojemnik: korpus nie działał, zmiana stylu czegokolwiek blisko związanego nie działała .. ja nie wiem, jaka jest magia i nie miałem czasu się dowiedzieć, ale po prostu zadziałało :) dzięki :)
Diego De Vita

1
  $('[data-toggle="popover"]').popover({
        placement: 'top',
        boundary: 'viewport',
        trigger: 'hover',
        html: true,
        content: function () {
            let content = $(this).attr("data-popover-content");
            return $(content).html();
        }
    });,



`placement`: 'top',
`boundary`: 'viewport'
both needed

0

Po prostu używam

$().popover({container: 'body'})

może nie wystarczyć przy wyświetlaniu okna popover w module BootstrapDialog, który również używa body jako kontenera i ma wyższy indeks Z.

Pochodzę z tą poprawką, która wykorzystuje wewnętrzne elementy Bootstrap3 (może nie działać z 2.x / 4.x), ale większość nowoczesnych instalacji Bootstrap to 3.x.

self.$anchor.on('shown.bs.popover', function(ev) {
    var tipCSS = self.$anchor.data('tipCSS');
    if (tipCSS !== undefined) {
        self.$anchor.data('bs.popover').$tip.css(tipCSS);
    }
    // ...
});

W ten sposób różne popovery mogą mieć inny indeks Z, niektóre są w trybie BootstrapDialog, a inne są nad nim.


0

W moim przypadku musiałem skorzystać z opcji szablonu popover i dodać własną klasę css do szablonu html:

        $("[data-toggle='popover']").popover(
          {
            container: 'body',
            template: '<div class="popover top-modal" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
       });

CSS:

.top-modal {
  z-index: 99999;
}

0
Problem solved with data-container="body" and z-index
1->
<div class="button btn-align"
data-container="body"  
data-toggle="popover"
data-placement="top"
title="Top"
data-trigger="hover"
data-title-backcolor="#fff"
data-content="A top aligned popover is a really boring thing in the real 
life.">Top</div>
2->
.ggpopover.in {
z-index: 9999 !important;
}

0

Jeśli masz jakieś style w elemencie nadrzędnym, które kolidują z wyskakującym okienkiem, będziesz chciał określić niestandardowy kontener, aby zamiast tego w tym elemencie pojawił się kod HTML popover.

Na przykład powiedz, że rodzicem popover jest body, a następnie możesz użyć.

    <a href="#" data-toggle="tooltip" data-container="body"> Popover One </a>

Innym przypadkiem może być, gdy popover zostanie umieszczony w innym elemencie i chcesz wyświetlić popover nad tym elementem, wtedy musisz określić ten element w kontenerze danych. przykład: Załóżmy, że mamy popover wewnątrz modalu bootstrap z id jako „modal-dwa”, wtedy musisz ustawić „data-container” na „modal-dwa”.

    <a href="#" data-toggle="tooltip" data-container="#modal-two"> Popover Two </a>

-1

Może to mieć związek z główną listą indeksu Z na zmiennych. Bez. Ogólnie rzecz biorąc, upewnij się, że Twój plik variable.less jest poprawny i aktualny.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.