我遇到了一個讓我發瘋的小問題,我歡迎您對此問題的任何想法。在這一點上,我覺得我只是圍着圈子走。JavaScript更改爲被延遲的樣式
我有以下代碼:
function JSsortTable(phase) {
dynaLoadingDivShow();
createSortArray();
dataArr = do2DArraySort(dataArr, orderList, orderDir);
sortArrayToRs();
dynaListTable.tableControl.refreshTableViaObjects(rsDynaList, colObjs);
dynaLoadingDivHide();
}
function dynaLoadingDivShow() {
document.getElementById('dynaReportGuiWorking').style.display = 'block';
document.getElementById('dynaReportGuiWorking').style.visibility = 'visible';
}
function dynaLoadingDivHide() {
document.getElementById('dynaReportGuiWorking').style.display = 'none';
document.getElementById('dynaReportGuiWorking').style.visibility = 'hidden';
}
<div style="visibility:hidden; display:none; z-index:25;" class="tableControlHeader" id="dynaReportGuiWorking">
Working...
</div>
我打電話JSsortTable作爲一個onclick事件。當我運行上面的代碼時,我從來沒有看到有問題的div。 JSsortTable函數需要大約800-2500毫秒的時間才能運行,所以這是非常不可能的,我錯過了10次以上的嘗試。如果我更改div的樣式開始可見,那麼它將保持可見狀態,直到JSsortTable完成運行後消失;完全如預期。所以我認爲問題在於dynaLoadingDivShow。
現在,我試圖刪除dynaLoadingDivHide,看看會發生什麼,並發現一些完全意外的事情。當JSsortTable函數觸發時,div不會出現。相反,在所有其他代碼運行後,當JSsortTable完成時,div變得可見。它像IE(版本8)一樣保存了對DOM的所有更改,然後等待直到結束繪製它們。顯然,這不是理想的行爲。
任何人有任何想法呢?我只允許在工作中使用IE,所以我沒有在其他瀏覽器上嘗試過。我有足夠的CSS/JS知識是危險的,但我絕不是專家。 ;)
謝謝!
你能異步調用排序功能和移動dynaLoadingDivHide方法的,端函數調用? http://stackoverflow.com/questions/1397478/forcing-a-dom-refresh-in-internet-explorer-after-javascript-dom-manipulation – Jasoon 2011-05-20 12:39:15
div在調用dynaLoadingDivShow()時是否包含任何內容?其他操作完成後它是否會被數據填充?如果div在第一次「show」調用時爲空,這將符合您的描述,在其他操作完成後它變得可見。 – 2011-05-20 12:35:33