2010-06-08 41 views
3

最近我遇到了IE的問題。我有一個函數如何在IE中立即通過javascript設置樣式

function() { 
    ShowProgress(); 
    DoSomeWork(); 
    HideProgress(); 
} 

其中ShowProgress和HideProgress使用jQuery的CSS()方法只是操縱 '顯示' CSS樣式。

在FF中一切正常,並且同時我將顯示屬性更改爲阻止,出現進度條。但不在IE中。在IE中應用了這種風格,一旦我離開了這個功能。這意味着它從來沒有顯示過,因爲在函數結束時我只是隱藏它。 (如果我刪除了HideProgress行,那麼在完成執行該函數(更準確地說,當調用函數結束時立即顯示進度條 - 因此IE中沒有其他事情)時,進度條就會出現)。

有沒有人遇到過這種現象?有沒有辦法讓IE立即應用風格?

我已經準備好了一個解決方案,但是我需要一些時間來實現它。我的DoSomeWork()方法正在進行一些AJAX調用,而這些調用現在是同步的。我假設讓它們異步可以解決問題,但我必須重新設計一些代碼,所以找到一個適用於立即應用樣式的解決方案會更簡單。

感謝rezna

回答

1

同步請求會阻止整個UI,這很可怕。你是對你的假設,但如果你想繼續走這條道路,以$地獄的內部圈子,試試這個:

function() { 
    ShowProgress(); 
    window.setTimeout(function() { 
     DoSomeWork(); 
     HideProgress(); 
    }, 0); 
}

請注意,我沒有測試過這一點。如果您仍未看到任何內容,請嘗試播放超時值(當前爲0)。

+0

是的,我認爲是。玩setTimeout是非常棘手的,我認爲它會帶來一些更糟糕的問題。 所以我要重新設計代碼:) – rezna 2010-06-08 07:59:05

0

嘗試投擲HideProgress方法爲setTimeout的。例如:

function() { 
    ShowProgress(); 
    DoSomeWork(); 
    setTimeout(HideProgress,0); 
} 

即使延遲是假想0毫秒,這將有扔HideProcess方法到隊列末尾的淨效應,並可能給瀏覽器,它需要的喘息空間。

[編輯]我應該提到,如果你經常和迅速地調用這個方法,這個方法有一個缺點:競態條件。當另一個DoSomeWork()正在執行時,最終可能會執行上一個超時。如果DoSomeWork需要很長時間才能完成,則會發生。如果這是一個風險,您可能需要爲您的進度條實現一個計數器,並且只有在啓動計數器的計數器與計數器的當前值相同時才執行HideProgress。

+0

問題不在於HideProgress,而是在執行DoSomeWork()期間進度條不可見的表面... – rezna 2010-06-08 07:57:25

+0

如果您刪除了'HideProgress()'和/或'DoSomeWork()',進度酒吧顯示在所有?你可以發佈你的ShowProgress函數嗎? – Andrew 2010-06-08 07:59:28

+0

它被寫入原始問題: (如果我刪除了HideProgress行,則在完成執行功能後(更確切地說,當調用函數結束時立即顯示進度條 - 所以IE中沒有其他任何內容))時顯示進度條) 。我的ShowProgress()很簡單 function ShowProgress(){('#my-id')。css('display','block'); } – rezna 2010-06-08 08:06:52

相關問題