2013-04-25 26 views
8

Zrobiłem , w którym używam funkcji poppers programu Twitter twitter na ikonie.Jak mogę zamknąć bootstrap-popover za pomocą przycisku wewnątrz popover?

<div style="margin-top:200px"> 
    <ul> 
     <li class="in-row"> 
      <a href="#" id="meddelanden" data-title="Meddelanden" data-toggle="clickover" 
      data-placement="right"><i class="icon-globe"></i></a> 
     </li> 
    </ul> 
</div> 

jQuery:

var elem = '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+ 
    '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+ 
    '<button id="close-popover" class="btn btn-small btn-primary pull-right">Close please!</button>'; 

$('#meddelanden').popover({animation:true, content:elem, html:true}); 

I nie wydają się być w stanie zamknąć popover z przycisku wewnątrz niego. Próbowałem, aby funkcja kliknięcia jquery na id "close-popover", ale notowanie dzieje. (Nie uwzględniłem mojej próby zamknięcia go wewnątrz jsfiddle)

Jakieś sugestie, jak zamknąć popover za pomocą przycisku wewnątrz popover?

Pozdrawiam, Bill

Odpowiedz

7

Spróbuj tego: - http://jsfiddle.net/6hkkk/

var elem = '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+ 
    '<div class="well"><a href="google.com">Message one, From someone.</a></div>'+ 
    '<button id="close-popover" data-toggle="clickover" class="btn btn-small btn-primary pull-right" onclick="$(&quot;#meddelanden&quot;).popover(&quot;hide&quot;);">Close please!</button>'; 



$('#meddelanden').popover({animation:true, content:elem, html:true}); 
+1

Dziękujemy! To działało jak czar, podczas gdy żadna inna sugestia nie zadziałała. Jestem bardzo wdzięczny za twoją pomoc!/Bill –

+0

Nie ma problemu, cieszę się, że pomogło mi to w rozwiązaniu problemu ... :) – PSL

+0

Lepszym rozwiązaniem byłoby dodanie klasy "close" do przycisku i dodanie tego handler'a do zamknięcia akcji: $ (document) .on ("kliknij", ".popover .close", function() {$ (this) .parents (". popover"). popover ('hide');}); –

0

spróbuj tego:

<input type="button" onclick="$(this).parent().hide();" value="close"> 

przekazując $ (this) swój przedstawieniu przycisk i rodzic odwołuje element przycisk siedzi w

+0

edytowany .. miał niewłaściwej składni .. to powinno działać przez zamknięcie elementu nadrzędnego przycisku –

+0

niestety to nie rade. Nie zamyka całego popover (tylko jego rodzic, nie nagłówek i inne). Nie można również przywrócić popover, klikając ikonę ponownie. –

+0

dam Nie widziałem twojego linku jfiddle ale tak .. $ ('# meddelanden'). Popover ('hide'); jest drogą do .. powinieneś zaakceptować jon__o jako odpowiedź –

3

Jak o trochę onclick:

<button onclick="$('#meddelanden').popover('hide');" class="btn btn-small btn-primary pull-right">Close please!</button> 

A co powiesz na funkcję? jonowy:

<button onclick="close_please();" class="btn btn-small btn-primary pull-right">Close please!</button> 

z ...

function close_please() { 
    $('#meddelanden').popover('hide'); 
} 

Albo jak o wiązanie z przycisku po to został stworzony.

$('#meddelanden').popover({animation:true, content:elem, html:true}); 
$('#close-popover').bind('click', function(){ 
    $('#meddelanden').popover('hide'); 
}); 
0

umieścić to w swoim konstruktorze tytuł popover ...

'<button class="btn btn-danger btn-xs pull-right" 
onclick="$(this).parent().parent().parent().hide()"><span class="glyphicon 
glyphicon-remove"></span></button>some text' 

... dostać mały czerwony przycisk na górze 'x' w prawym rogu:

//$('[data-toggle=popover]').popover({title:that string here}) 

Podaję ta sama odpowiedź https://stackoverflow.com/a/23556160/3603692 Mam nadzieję, że to jest dozwolone.

+0

To ukrywa popover, ale nieprawidłowo ustawia nowy status, więc ponowne kliknięcie przycisku wyzwalacza nie wyświetli popover (prawdopodobnie go ponownie ukryje), musisz kliknąć dwa razy, aby uzyskać popover z powrotem, co nie jest do zaakceptowania. – youen

2

Poprzednie przykłady mają dwie główne wady:

  1. przycisk „Zamknij” potrzeb w jakiś sposób, aby zdawać sobie sprawę z ID odwołuje-elementu.
  2. Potrzeba dodania zdarzenia "shown.bs.popover", "nasłuchiwania" odbiornika do przycisku zamykania; co również nie jest dobrym rozwiązaniem, ponieważ będziesz wtedy dodawał takiego słuchacza za każdym razem, gdy pojawi się "popover".

Poniżej znajduje się rozwiązanie, które nie ma takich wad.

Domyślnie element "popover" jest wstawiany bezpośrednio po elemencie przywoływanym w DOM (następnie zauważony element referencyjny i popover są natychmiastowymi elementami siostrzanymi). Tak więc, po kliknięciu przycisku "zamknij", możesz po prostu wyszukać jego najbliższy rodzic "div.popover", a następnie odszukać bezpośrednio poprzedzający element rodzeństwa takiego rodzica.

Wystarczy dodać następujący kod w 'onclick' obsługi programu „ścisłej przycisku:

$(this).closest('div.popover').prev().popover('hide'); 

Przykład:

var genericCloseBtnHtml = '<button onclick="$(this).closest(\'div.popover\').prev().popover(\'hide\');" type="button" class="close" aria-hidden="true">&times;</button>'; 

$loginForm.popover({ 
    placement: 'auto left', 
    trigger: 'manual', 
    html: true, 
    title: 'Alert' + genericCloseBtnHtml, 
    content: 'invalid email and/or password' 
}); 
+1

O ile mi wiadomo, to nie zadziała, jeśli ustawisz kontener danych tak, aby okienko popover nie znajdowało się obok jego przycisku wyzwalającego (w moim przypadku ustawiam kontener danych = "body", aby wyświetlał się nad kontenerem wyzwalacza). Czy istnieje sposób, aby rzeczywiście pobrać popover we wszystkich przypadkach? – youen

0

alternatywna bez funkcji wzywając kliknij:

JavaScript

var $popoverParent = $('.popover-parent').popover(); 

//allow to close when close button clicked 
//register listener before popover shown 
$popoverParent.on('shown.bs.popover', function() 
{ 
    //get the actual shown popover 
    var $popover = $(this).data('bs.popover').tip(); 

    //find the close button 
    var $closeButton = $popover.find('.close-btn'); 

    $closeButton.click(function(){ 
     $popoverParent.popover('hide'); 
    }); 
}); 

//show your popover 
$popoverParent.popover('show'); 
-1

Mam wiele przeglądarek na mojej stronie i wszystkie mają ten sam niestandardowy pasek tytułu, więc wszystkie mają ten sam przycisk zamykania. Dlatego nie mogę przekazać identyfikatora do programu obsługi onclick. Zamiast tego postanowiłem poszukać otwartego popover (tylko jeden może być otwarty na raz), a następnie go zamknąć.

function closeMe() { 
    $(document).find('.popoverIsOpen').popover('hide'); 
} 
Powiązane problemy