2012-01-20 15 views
11

IE 9 zachowuje się dla mnie dziwnie. Mam kontrolkę zmiany rozmiaru czcionki strony, która zapisuje ustawienia użytkowników, a następnie w gotowym dokumencie ustawia rozmiar czcionki ciała do tego rozmiaru. To działa dobrze, problem polega na tym, że kiedy strona z listami rozwijanymi ładuje się, w IE 9, czasami tekst jest odcięty.Zaznacz pole obcinania tekstu, gdy rozmiar czcionki zostanie zmieniony za pomocą javascript na gotowy dokument w IE 9

Uprościliśmy kod do tego jsfiddle, aby zademonstrować. 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> 

css:

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

i javascript:

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

}); 

ma ktoś natknąć tego dziwnego zachowania? czy istnieje prosta naprawa?

Nie dzieje się to w IE 8, firefox, safari lub chrome.

+0

Czy tag

+0

Nie ma stylów wpływających na znaczniki '

+0

To wydaje się działać dobrze, gdy przetestowałem go na IE9, czy możesz dostarczyć zrzut ekranu z tego, co widzisz? Czy możliwe jest, że nie określiłeś typu dokumentu na oryginale lub niestandardowym typie dokumentu, a to spowodowało, że przeglądarka działa w trybie dziwactwa? – PriorityMark

Odpowiedz

22

Wybrane pola w IE cierpią na długą i niefortunną historię nadzwyczajnych błędów.

W dniach IE6, pole wyboru było okienkowym sterowaniem OS - a wrapper for the Windows Shell ListBox, które istniało w a separate MSHTML plane z większości innych treści.

W wersji IE 7 element sterujący to rewritten from scratch jako wewnętrzny element renderowany bezpośrednio przez silnik MSHTML. Pomogło to w niektórych bardziej widocznych błędach, ale część tego nieszczęśliwego dziedzictwa pozostaje. W szczególności: po narysowaniu pola wyboru, zmiany za pośrednictwem DOM nie zawsze rozprzestrzeniają się, jak można się spodziewać.

W tym miejscu każda opcja na liście wyboru jest rysowana do dokładnie odpowiedniej szerokości dla tekstu, który zawiera, gdy formant jest po raz pierwszy renderowany. Kiedy można zwiększyć rozmiar tekstu strony, IE poprawnie propaguje zmiany do samej kontroli, ale nie regulować szerokość opcji, więc tekst zaczyna overflowing to the next line:

Select box overflowing to the next line in IE9.

Można rozwiązać ten problem poprzez zmuszanie odświeżyć pole wyboru.Jednym ze sposobów, aby to zrobić jest append a single space character to the select element:

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

Alternatywnie, można change the style attribute:

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

Spośród nich strategia .append() ma najmniejszą liczbę potencjalnych skutków ubocznych i wymusza lepszą separację styl i zachowanie. (Istotny wpływ na DOM ma zero).

+0

dzięki Jordan, Rozwiązuje to również. JUST oddałem hołd Bharathowi 2 sekundy temu! więc dam ci uprowadzenie. – Patricia

+0

Nie ma problemu, po prostu cieszę się, że mogę przyczynić się do tej małej tajemnicy. :) Dzięki za przegraną! –

+0

@Patricia FYI-I nie mogłem zostawić tego w "jest błąd renderowania", więc zaktualizowałem swoją odpowiedź, podając kilka dodatkowych informacji, które mogą okazać się pomocne. –

1

Wygląda na to, że przyczyną jest wyrażenie rozmiaru czcionki w EM. zmienić na piksele i wszystko jest w porządku. To prawdopodobnie błąd w IE 9.

+0

musi być em, ponieważ jest względny w stosunku do wielkości ciała. to jest cały punkt kontroli zmiany czcionki. – Patricia

+0

OK - wygląda na to, że Microsoft spieprzył, więc nie ma tego planu. –

2

Spróbuj użyć% dla skalowalności. Zobacz tutaj, aby zapoznać się z dokumentacją: em vs %: http://kyleschaeffer.com/best-practices/css-font-size-em-vs-px-vs-pt-vs/

+0

ten sam problem co em. – Patricia

+0

w tym przypadku najlepszym rozwiązaniem IMO jest ustawienie kontrolera JS dla czcionki względnie do proporcji szerokości/wysokości ekranu, aby można było sprawdzić, czy użytkownik zminimalizuje lub zmienia rozmiar przeglądarki, którą można kontrolować, aby zobaczyć, jaki rozmiar w oknie możesz zmienić rozmiar czcionki na podstawie tego. Nie mogę wymyślić żadnej innej alternatywy. – khael

+0

nie ma to nic wspólnego z rozmiarem okna przeglądarki. – Patricia

5

Wygląda na IE9. Aby obejść ten problem, można odświeżyć css rozmiaru czcionki select.

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

Przykład. http://jsfiddle.net/z6Paz/16/

+0

to całkowicie niszczy prezentację i logikę od siebie, ale rozwiązuje problem. w przeciwieństwie do innych odpowiedzi. moja nagroda wygasa za 5 minut, więc dam ci to. – Patricia

+0

Dzięki :). Aby zabezpieczyć logikę, możesz użyć dowolnego nieużywanego css, aby go odświeżyć. jak if (jQuery.browser.msie) $ ("select"). Css ("kierunek", "dziedziczą") nadzieję, że to pomaga – Bharath

1

To jest moja pierwsza odpowiedź na pytanie, ale znalazłem tę stronę, ponieważ miałem ten sam problem.

Zauważyłem, że po prostu dodając cokolwiek do wartości na pasku narzędziowym Dev, pojawił się tekst, więc to, co zrobiliśmy, zostało dodane, a następnie usunięto trochę białej przestrzeni, która działa idealnie.

Oto obszar naszego kodu, który spełnił swoje zadanie:

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

Mam nadzieję, że ktoś pomoże w przyszłości

Powiązane problemy