2011-06-21 60 views
0

我有onclick事件一個輸入按鈕:JavaScript的與IE6的問題

<input id="bSave" type="button" name="bSave" value=Save 
      onclick="save();window.close();"> 

這裏是保存功能

function save(){ 
       //do some calculation 
    calculate(); 
    //submit a form in this popup window 
    document.RCSARiskAssessDimenResultForm.submit(); 
       //call parent opener to submit another form in parent window 
    window.opener.document.RiskControlAssessmentDetailForm.bSave.onclick(); 
} 

在我的電腦用的win7/IE8中,submition發送請求和完成, 這裏沒有問題。 但是,客戶端環境與xp/ie6,有時(並不總是)第一個submition只是沒有發送。 似乎window.close()被調用或其他未知的原因(網絡延遲?)。

任何類型的建議(信息)將感恩。

回答

0

您將不得不爲此使用回調函數。

請看下面的例子。

function celebrate(){ 
    //your celebrate code here 
} 


function run(){ 
    //your run code here 
} 

function compete(){ 
    run(); 
    celebrate(); 
} 

在上述情況下,由於javascript運行時的性質,有時會看到慶祝將在運行函數之前或之後調用。

運行慶祝是失敗的。

function run(callbackFunction){ 
    //your run code here 

    //execute the callback 
    callbackFunction(); 
} 

function celebrate(){ 
    //your celebrate code here 
} 

function compete(){ 
    run(function(){celebrate();}); 
} 

這可以確保您在運行時不會慶祝。

乾杯。

+1

'new function(){celebrate();}'返回一個對象不是函數。只需通過'慶祝' – Raynos

+0

哦,是的,需要更正,謝謝雷諾斯。 :) – bhagyas

+0

@bhagyas你可以通過'慶祝'不需要將它包裝在一個函數中 – Raynos

2

當你確定提交完成後,你應該把你的window.close()。通常以回調的形式。這樣你就可以控制發生的事情。

JavaScript有一個單線程,它可能看起來順序,但它不是。如果你的提交有一個到服務器的調用,或者使用setTimeoutsetInterval你開始有一些異步操作,並調用下一個JS語句。

可能因爲IE6有一個更脆弱的實現,需要一些更多的時間來做一些事情,並揭示一個問題,你可能會遇到與其他瀏覽器連接速度慢的問題。

+0

謝謝Mic.very明確! – chun