2010-06-24 13 views
6

Ho una pagina che dissolveIn e dissolve un elemento in linea e jQuery non funziona. E poi quando cambio gli Strumenti per sviluppatori per usare la Modalità Browser di IE 7, viene mostrato l'effetto fadeIn() e fadeOut().fadeIn() e fadeOut() di jQuery non funzionano con IE 8?

+0

Lavori per me. Il tuo markup html è valido? Se non IE fa le cose nel modo in cui "IT" crede sia la cosa migliore, di solito è sbagliato. (rispetto agli standard) – Aren

risposta

6

IE ha un dettaglio di implementazione conosciuta come "hasLayout" che, purtroppo, spesso perde oltre l'astrazione API e deve essere affrontato a testa alta ... Questa è la battaglia si faccia oggi: gli elementi in linea generale, non avranno "layout" e quindi non funzionerà con "filtri" ... che sono ciò che jQuery usa per simulare l'opacità su IE.

Questa non è una novità in IE8, e normalmente non avrebbe dovuto preoccuparsi affatto dal momento che è proprio questa sorta di follia browser-specific che jQuery ha lo scopo di carta sopra ... In effetti, è per questo che non mi preoccupo di entrare nei dettagli su cosa significhi realmente "hasLayout" e "filtri" - probabilmente non ti interessa, e non dovresti (ma, se sei interessato, google ...)

Il problema è, l'hack utilizzato da jQuery sotto il cofano per forzare il layout (quindi i filtri funzionano (in modo che possa simulare l'opacità (dato che IE non lo implementa))) ... non funziona su IE8. Non è che semplicemente fantastico, eh? Hanno risolto il bug in base al quale gli elementi si comportavano come elementi display: inline-block, ma trascuravano di implementare la funzione che la gente usava il loro bug per hackerare il supporto per ...

Bene, non si può fare al riguardo. Scrivere una brutta email a Team IE potrebbe farti sentire un po 'meglio, ma sono al lavoro su IE9, che dovrebbe (battere sul legno ...) risolvere la maggior parte di questi problemi. Nel frattempo, non vi resta che fare manualmente quello che IE utilizzato fare (kinda, sorta, e certamente in modo non corretto) tutto da solo: forza l'elemento in linea in modalità inline-block:

$("myInlineElement").css({display: 'inline-block'}).faceOut(); 

... o meglio ancora, put it in an IE8-only stylesheet ...