2014-11-19 25 views
6

Ho un popover con trigger di attivazione e un collegamento nel popover.Il collegamento nel popover Bootstrap non funziona

Html:

<div class="tree"> 
    <div class="html-popup"> 
     Popup text <a href="http://www.google.com" target="_top">Link somewhere</a> 
    </div> 
    <a tabindex="0" role="button" data-container="body" data-toggle="popover" data-trigger="focus" data-placement="bottom"> 
     Text that has a popover 
    </a> 
</div> 

JavaScript:

$('.tree [data-toggle="popover" ]').popover({ 
    html: true, 
    content: function() { 
     return $(this).prev().html(); 
    } 
}); 

Ecco un esempio dal vivo: JSFiddle

In Chrome sul link si apre prima della chiusura del popover, ma in IE e Firefox chiude semplicemente il popover.

Devo supportare IE9 e versioni ragionevolmente nuove di Firefox. Come posso rendere il collegamento aperto prima che il popover si chiuda?

Grazie!

+0

Non capisco perché vuoi target '_top'. Non funziona nemmeno in Chrome. Funziona come un target '_blank', quindi è più facile applicare tale target e ottenere lo stesso risultato in qualsiasi browser. No? – inigomedina

risposta

0

Hai provato questo codice solo in jsfiddle?

Se è così, questo sta accadendo perché questo tipo di ambiente virtuale funziona utilizzando iframe, che la maggior parte dei browser non consente il reindirizzamento per motivi di sicurezza. Rimozione del 'bersaglio' attributo si otterrà il seguente errore console:

Load denied by X-Frame-Options: https://www.google.com.br/ does not permit cross-origin framing.

Se si sta lavorando all'interno di un iframe una buona opzione è il cambiamento di target="_blank" altrimenti dovrebbe funzionare.

+0

Ho aggiornato il Fiddle per usare _blank e ora IE e Firefox sembrano funzionare. L'abbiamo implementato in un progetto del cliente, ma potresti verificare prima di contrassegnare il tuo commento come una risposta che risolverà questa funzione solo in jsfiddle o in qualsiasi altro posto? – MathiasR

+0

Ho fatto un semplice file html con il tuo codice jsfiddle e funziona normalmente in FF e IE, ma ho provato solo nelle ultime versioni. Ecco il codice che ho provato http://pastebin.com/G5vaYHiA –

+0

Ehi, qualche progresso? –

0

Siamo spiacenti, non è possibile aggiungere un commento alla tua risposta matheusrufca, ma questo non aiuta con IE9 e inferiore. Il popover è semplicemente scomparso, indipendentemente dalla sua origine o meno.

+0

La domanda dice che funziona solo su Chrome. Ho provato il codice all'esterno di jsfiddle e funziona. Nella modalità di compatibilità IE funziona anche bene. È molto strano che un semplice collegamento all'interno di un div non si apra, forse potrebbe essere una funzione preventDefault. –

+0

Ho appena provato l'emulazione IE9 e non funziona lì. Nel collegamento in modalità IE10 funziona bene. Non appena ho dovuto supportare IE9 come MathiasR, ho votato questa domanda. – Lanayx

3

Ho giocato un po 'con il tooltip di bootstrap e una soluzione rapida e sporca sarebbe quella di rimuovere la funzionalità di chiusura su sfocatura e chiuderla quando si fa clic su un elemento al di fuori del suggerimento.

Ecco un breve esempio: https://jsfiddle.net/b8hjg5x9/.

$('.tree [data-toggle="popover"]').popover({ 
    html: true, 
    content: function() { 
     return $(".html-popup").html(); 
    } 
}).on('show.bs.popover', function() { 
    $('[data-toggle="popover"]').popover('hide'); 
}); 

$('html').on('click', function (e) { 
    if ($(e.target).data('toggle') !== 'popover') { 
     $('[data-toggle="popover"]').popover('hide'); 
    } 
}); 

Spero che questo aiuti.

0

Risposta a BebliucGeorge. Questo funziona per un caso semplice, ma per 2 o più tooltip introduce un nuovo bug - il popover non si chiude se clicco su un altro interruttore.

Example: 

https://jsfiddle.net/vc7zn1o6/29/

+0

Ciao, signore, ha ragione. Questo può essere aggirato chiudendo tutti i popover quando viene attivato l'evento show.bs.popover. Ho aggiornato la mia risposta con la correzione. – BebliucGeorge

+0

Grazie! Questo funziona – Lanayx

5

Rimuovere sottolineatura bersaglio all'interno tag..It dovrà lavorare bene in IE

<div class="tree"> 
    <div class="html-popup"> Popup text <a href="http://www.google.com" target="top">Link somewhere</a> 
    </div> 
<a tabindex="0" role="button" data-container="body" data-toggle="popover" data-trigger="focus" data-placement="bottom"> 
Text that has a popover</a> 
</div> 
+0

Hey Lanayx Controlla la soluzione semplicemente sostituisci _top con sopra come sopra –

+0

CHECK OUT THIS FIDDLE –

+0

http://jsfiddle.net/LrL42m8k/ –

0

Uso _blank invece di _top nell'obiettivo di ancoraggio. Poi il codice dovrebbe essere simile:

<div class="tree"> 
     <div class="html-popup"> 
      Popup text <a href="http://www.google.com" target="_blank">Link somewhere</a> 
     </div> 
     <a tabindex="0" role="button" data-container="body" data-toggle="popover" data-trigger="focus" data-placement="bottom"> 
     Text that has a popover 
     </a> 
    </div> 
1

Aggiungi un onclick al link:

<a href="#" onclick="window.open('http://www.google.com/');\"> link </a> 

ha lavorato per me.Ma non si innesca con il tasto Invio.

0

Immagino che questo problema sia dovuto all'uso di data-trigger="focus". Quando fai clic sul link nel popover, viene attivato "focus" e quindi il popover viene chiuso. Al momento, l'evento link di collegamento non può essere eccitato. Ho risolto questo problema ritardando il popover del popover dopo il popover del clic.

Esempio: $('[data-toggle=popover]').popover({ delay: { hide: 200 } });

Problemi correlati