2012-01-20 4 views
11

IE 9 si comporta in modo abbastanza strano per me. Ho un controllo di modifica della dimensione del carattere della pagina che salva l'impostazione degli utenti e quindi nel documento pronto imposta la dimensione del carattere del corpo a quella dimensione. Funziona bene, il problema è che, quando una pagina con i dropdown viene caricata, in IE 9, a volte il testo viene troncato.Seleziona la casella troncando il testo quando la dimensione del carattere del corpo è cambiata tramite javascript sul documento pronto in IE 9

Ho semplificato il codice a questo jsfiddle per dimostrarlo. http://jsfiddle.net/z6Paz/3/

html:

<select id="theSelect" name="theSelect" >     
    <option value="2" >Letter (8.5 x 11&quot;)</option>  
    <option value="3" selected='selected'>A4 (8.27 x 11.69&quot;)</option> 
</select> 

il css:

select 
{ 
    font-size:1em; 
    width:240px; 
} 

e il javascript:

var userPrefSizeOffset = 2; 
$(function(){ 
    var currentFontSize = $('body').css('font-size'); 
    var currentFontSizeNum = parseFloat(currentFontSize); 
    $('body').css('font-size', currentFontSizeNum + userPrefSizeOffset); 

}); 

qualcuno ha incontrato questo strano comportamento? c'è una soluzione semplice?

Non succede in IE 8, in Firefox, in Safari o in Chrome.

+0

È il tuo tag

+0

non ci sono stili che interessano le ''

+0

Questo sembra funzionare bene quando l'ho testato su IE9, si può forse fornire uno screenshot di quello che stai vedendo? È possibile che tu non abbia specificato un doctype sul tuo originale o un doctype non standard e il tuo browser sia in modalità strane? – PriorityMark

risposta

22

Le caselle di selezione in IE soffrono di una lunga e sfortunata storia di errori straordinari.

Nei giorni di IE6, la casella di selezione era un controllo OS con finestra - a wrapper for the Windows Shell ListBox che esisteva in a separate MSHTML plane dalla maggior parte degli altri contenuti.

In IE 7, il controllo era rewritten from scratch come un elemento intrinseco reso direttamente dal motore MSHTML. Ciò ha aiutato con alcuni dei bug più importanti, ma alcuni di questa eredità infelice rimane. In particolare: dopo aver disegnato una casella di selezione, le modifiche tramite DOM non si propagano sempre come ci si potrebbe aspettare.

Qui, ogni opzione nell'elenco di selezione viene disegnata esattamente alla larghezza corretta per il testo che contiene quando viene eseguito il primo rendering del controllo. Quando si aumenta la dimensione del testo della pagina, IE si propaga correttamente la modifica al controllo di sé, ma non regola la larghezza delle opzioni, in modo testo inizia overflowing to the next line:

Select box overflowing to the next line in IE9.

È possibile risolvere questo forzando un riverniciare la casella di selezione.Un modo per farlo è quello di append a single space character to the select element:

$('select').append(' '); 

In alternativa, si potrebbe change the style attribute:

$('select').attr('style', ''); 

Di questi, la strategia .append() ha il minor numero di potenziali effetti collaterali e applica una migliore separazione di stile e di comportamento. (Il suo impatto essenziale sul DOM è nullo.)

+0

grazie Jordan, questo risolve pure. Ho dato la generosità a Bharath 2 secondi fa! quindi ti darò un upvote. – Patricia

+0

Nessun problema, sono contento di contribuire a questo piccolo mistero. :) Grazie per l'upvote! –

+0

@Patricia FYI-Non potevo semplicemente lasciarlo a "c'è un bug di rendering", quindi ho aggiornato la mia risposta con qualche altro dettaglio che potresti trovare utile. –

1

Sembra che esprimere la dimensione del carattere negli EM sia la causa. cambia in pixel e va bene. Questo è probabilmente un bug in IE 9.

+0

deve essere em perché è relativo alla dimensione del corpo. questo è il punto centrale del controllo del cambiamento di carattere. – Patricia

+0

OK: sembra che Microsoft abbia sbagliato, quindi c'è un piano. –

2

Provare a usare% per scalabilità. Vedere qui per alcuni documenti di em vs %: http://kyleschaeffer.com/best-practices/css-font-size-em-vs-px-vs-pt-vs/

+0

stesso problema di em. – Patricia

+0

in questo caso la migliore soluzione IMO è che dovresti creare un controller JS per il font relativamente alla proporzione larghezza/altezza dello schermo in modo che tu possa verificare se l'utente minimizza o cambia la dimensione del browser che potresti controllare per vedere quale dimensione la finestra ha così puoi cambiare la dimensione del carattere in base a quella. Non riesco a pensare ad altre alternative. – khael

+0

non ha nulla a che fare con le dimensioni della finestra del browser. – Patricia

5

Sembra problema IE9. Come soluzione alternativa, è possibile aggiornare il css della dimensione del carattere di selezione.

if(jQuery.browser.msie) 
$("select").css("font-size", "1em") 

Esempio. http://jsfiddle.net/z6Paz/16/

+0

questo distrugge totalmente mantenendo la presentazione e la logica a parte, ma risolve il problema. a differenza di nessuna delle altre risposte. la mia taglia scade tra 5 minuti, quindi te la darò. – Patricia

+0

Grazie :). Per salvaguardare le tue logiche, puoi utilizzare qualsiasi tipo di css non usato per aggiornarlo. come se (jQuery.browser.msie) $ ("select"). Css ("direzione", "ereditare") Spero che questo aiuto – Bharath

1

Questa è la mia prima risposta a una domanda, ma ho trovato questa pagina perché ho avuto lo stesso problema.

ho notato che solo con l'aggiunta di tutto per il valore nel Dev barra degli strumenti, il testo è apparso, così quello che abbiamo fatto è stato aggiunge poi togliere un pò di spazio bianco, che è perfettamente funzionante.

Ecco l'area del nostro codice che ha fatto il lavoro:

$('select').children().each(function() { 
    $(this).html($(this).html() +'&nbsp;&nbsp;'); 
    $(this).html($(this).html()); 
}); 

Mi auguro che aiuta qualcuno in futuro

Problemi correlati