2011-09-01 23 views
10

Ho un problema con la funzione jquery show in firefox.Jquery .show() non funziona in firefox

Situazione: Ho caricato un iframe con una pagina di aspx in un popup (fancybox). In quella pagina di Aspx ho un pulsante con un evento onclick che chiama una funzione personalizzata e in quella funzione spara la funzione .show() su un div. Questo div ha un elemento di stile che contiene: display: none ;.

Questo funziona in IE, safari, cromato. Funziona anche in firefox quando carico la pagina aspx standalone. Non funziona in firefox nel popup fancybox-iframe. Non ho errori javascript. Persino il display: nessuno viene rimosso dall'attributo style, ma il div non viene visualizzato.

il codice HTML della pagina di

<div class="popupWrapper"> 
    ..some elements 
    <div id="psharebutton" style="display:none;"> 
    ..content of the div 
    </div> 
</div> 

Il codice javascript:

function dolinkedin(url, title, summary, source) { 
     $(".smbutton").addClass("buttonDisabled"); 
     $("#linklinkedin").removeClass("buttonDisabled"); 
     $("#psharebutton").show(); 

     parent.sizeFancybox(); 
    } 

Il pulsante in cui viene attivato il popup, è un ancoraggio, che ha la classe fancyboxiframe. Fancybox genererà automaticamente il codice js per mostrare il popup.

Ho controllato questi argomenti:

Ho controllato se il mio HTML è valida ed è.

Qualche idea?

BHD

+0

hai provato $ ("# psharebutton"). Toggle(); ? –

+0

Non ho più il codice che riproduco :(Mi dispiace per quello –

risposta

8

ho avuto un problema simile e la mia soluzione era quella di fare

$("#psharebutton").css("display", "inline-block"); 

invece di

$("#psharebutton").show(); 

A jquery "spettacolo" è identico a impostare l'attributo di stile di visualizzazione a "blocco ". Ho scoperto che avevo bisogno di "inline-block" per firefox e chrome (non avevo bisogno di questo per IE). Credo (ma non ho confermato) che jquery sia abbastanza intelligente da sapere quale sia il valore di visualizzazione precedente e usarlo, ma nel mio caso ho iniziato con display impostato su "none" quindi non c'era alcun valore precedente.

+1

La tua risposta e la risposta di DJ erano probabilmente la soluzione, purtroppo non riesco più a riprodurlo, ma dopo aver visto simili comportamento, sono sicuro che è stato davvero così. Ho votato entrambe le vostre risposte. –

1

Basta scrivere come $ ("# psharebutton"). Attr ('display', '') o $ ("# psharebutton"). Attr ('display', 'block').

function dolinkedin(url, title, summary, source) { 
     $(".smbutton").addClass("buttonDisabled"); 
     $("#linklinkedin").removeClass("buttonDisabled"); 
     $("#psharebutton").attr('display',''); 

     parent.sizeFancybox(); 
    } 
+0

Vedere il mio commento su kirk :) –

1

Ho avuto un problema simile. Io ho impostato questo nel mio css:

body { display: none } 

e ho cercato di cambiare questo in jQuery:

$("body").show(); 

che non ha funzionato in Firefox.

Dopo aver cambiato il codice HTML per

<body style="display: none"> 

e rimuovendo la parte da CSS sono stato in grado di utilizzare jQuery show(); impeccabile

Sembra che l'ereditarietà delle regole css non segua la stessa routine in Firefox come in IE/Chrome.

+0

Grazie per la tua risposta, probabilmente è utile per gli altri :) –

0

Potrebbe essere solo un effetto collaterale di un errore js. Vale sempre la pena colpire F12 e vedere se ci sono errori js nella console. Ho avuto un problema simile in cui non riuscivo a capire perché .show() non stava lavorando su un input che aveva uno stile di 'display: none' in Firefox e si è scoperto che avevo un selettore mal formato che mancava un chiusura] e ha generato un errore che non si vede, fino a quando non si apre Firebug. Chrome è stato più tollerante ha mostrato il pulsante mentre Firefox ha preso il cattivo selettore.