2016-08-15 24 views
9

W tym prostym przykładzie https://jsfiddle.net/4rsje4b6/1/ dlaczego element #test nie jest wyświetlany przed pojawieniem się alertu?Dlaczego element nie jest wyświetlany przed ostrzeżeniem?

Czy metoda jQuery css() nie powinna być zsynchronizowana?

#test { 
    display: none; 
} 
<span id="test">Element</span> 
$("#test").css("display", "inline"); 
alert("Showed element!"); 

UPDATE:

Takie zachowanie jest dla mnie objawia Chrome wersja 52.0.2743.116 m, Windows 10.

+0

Cóż, wydaje się, że działa dla mnie (Firefox 47.0.1 na Windows 7). Nie można teraz przesłać zrzutu ekranu, ale wyraźnie widzę słowo "Element" renderowane w DOM, gdy wyświetlany jest alert. –

+0

Yep działa także dla mnie w Firefoksie 47.0.1, zachowanie zaobserwowano w wersji Chrome 52.0.2743.116 m. –

Odpowiedz

12

To zmienia styl synchronicznie, a zauważysz, że jeśli read back the value on the next line and show it.

$("#test").css("display", "inline"); 
alert("Showed element!" + $("#test").css("display")); 

Ale zmiana przedmiotu stylu wyzwala wiadomości żądania odświeżenia do renderowania stron, i że jest traktowane jak tylko przeglądarka staje się w stanie spoczynku, który jest po to rutyna skrypt został zakończony.

To zależy jednak od przeglądarki. W Edge działa dobrze, a element jest wyświetlany od razu, ale w Chrome i Vivaldi tak nie jest.

Kolejny test, aby sprawdzić, jak obsługują to przeglądarki: Jeśli zmienisz rozmiar okna przeglądarki, JSFiddle będzie skalować (każdy z obszarów zachowuje ten sam względny rozmiar). Jeśli zmienisz rozmiar przeglądarki Vivaldi z ostrzeżeniem otwartym, nie zrobi tego. W rzeczywistości, jeśli sprawisz, że będzie mały, a następnie pokaż alert, a następnie go powiększyć, po prostu uzyskać szary obszar w nowym miejscu, aż zamkniesz okno komunikatu. W Edge, skrzypce będą po prostu zmieniać rozmiar w tle, nawet jeśli całe okno przeglądarki jest wyszarzone, więc nie jest to tylko kwestia czasu przetwarzania, ale bardziej, że Chrome całkowicie zamraża stronę po otwarciu alertu.

+3

(+1) Innymi słowy, w niektórych przeglądarkach relacja między stanem stylu obiektu a jego pojawieniem się na ekranie ma związek, który jest aktualizowany asynchronicznie, niezależnie od sposobu aktualizacji stylu. – apsillers

+0

Dzięki za odpowiedź. To jest do bani. Ale przypuszczam, że alarmowe okna dialogowe nie są już używane, więc ... –

+0

@apsillers Rzeczywiście. Kolejny test. -edit- przeniesiony z komentarza do odpowiedzi – GolezTrol

Powiązane problemy