2009-06-12 64 views
1

我有一個頁面,它在某個操作上使iframe可見,並用一些HTML(例如多選框和一個OK按鈕)填充iframe。更改可見性不會立即隱藏iFrame

上的iframe OK按鈕的定義有點像這樣的onClick方法:

onClick="parent.hideIFrame();parent.processMultiSelectBox();" 

當用戶點擊內嵌框架(與多選框播放後大概)OK,我想的iFrame立即消失,然後可以處理多選框中的選定值。但這不是發生了什麼事。 iFrame在其他功能運行期間保持可見狀態,僅在第二個功能結束後消失。

的hideIFrame功能是非常簡單的:

function hideIFrame() { 
    frmObj = document.all.iFrameID; 
    if(frmObj) { 
    frmObj.style.visibility = "hidden"; 
    } 
} 

我轉述爲了清楚起見,上面的函數(去掉了一些指示器變量賦值等)

第二函數實際上環路上在所有選項多重選擇的對象,並做它的東西。這需要大約半秒鐘,只有在完成後,我的iFrame纔會消失。點擊「確定」後,看到它停留了半秒鐘,有點令人煩惱。

我的問題是,是否有某種方法可以讓織物消失得更快。用「古典C」的術語來說,是否有一個「齊平」的能見度變化立即發生?

我注意到,如果我在第二個函數中將「alert」作爲第一行,那麼iframe會立即消失,但現在它在警告框上的確定消失,並且第二個函數完成所需的時間。

謝謝。

編輯:基於DDaviesBrackett的答案,這是我落得這樣做:

在iframe的onclick改爲:

onClick="parent.hideAndProcessMultiSelectBox(parm1, parm2);" 

的hideAndProcessMultiSelectBox功能被定義爲:

function hideAndProcessMultiSelectBox(parm1, parm2) { 
    hideIFrame(); 
    setTimeout(function() { processMultiSelectBox(parm1, parm2); }, 0); 
} 

Vo ..不延遲..

回答

3

你已經找到了問題的根源;在當前JS線程完成之前文件迴流不會發生(以免在JS執行期間重新繪製很多次)。在進行昂貴的處理之前,您需要將控制權返還給瀏覽器。

實現這一目標,儘管它沒有作出絲毫明顯的代碼最簡單的方法,是調用processMultiSelectBox中的setTimeout爲0的延遲:如果你需要傳遞參數

onClick="parent.hideIFrame();parent.setTimeout(parent.processMultiSelectBox,0);" 

對於你設置超時的事情,你有兩種選擇:設置一個字符串的超時時間,以避免使用Javascript(壞,壞,壞,可怕)或定義一個匿名函數來調用你感興趣的函數:

onClick="parent.hideIFrame();parent.setTimeout(function(){parent.processMultiSelectBox(foo, bar, 'baz');},0);" 

RSolberg的回覆可能會所以幫忙,儘管visibility:hiddendisplay:none之間有區別。

+0

你可能會在這裏。我只是摔跤我需要傳遞給「processMultiSelectBox」參數。一旦我能讓他們去,我會更新..謝謝。 – Adnan 2009-06-12 22:52:32