带有ie6问题的javascript

时间:2011-06-21 07:46:33

标签: javascript javascript-events

我有一个带onclick事件的输入按钮:

<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的PC中,发送并完成了子请求,没有问题。 但是xp / ie6的客户端环境,有时(并不总是)第一个submition就没有被发送。 似乎window.close()被调用或其他未知原因(网络延迟?)。

任何建议(信息)都会感激不尽。

2 个答案:

答案 0 :(得分:2)

当您确定提交完成后,您应该放置window.close()。通常以回调的形式出现。通过这种方式,您可以控制发生的事情。

Javascript有一个单独的线程,它可能看起来是顺序的,但事实并非如此。如果您的提交调用服务器,或者使用setTimeoutsetInterval,则会开始执行某些异步操作,并调用下一个JS语句。

可能因为IE6的实现更加脆弱,需要花费更多时间来做一些事情,并且可以解决与其他浏览器连接速度慢的问题。

答案 1 :(得分:0)

您必须使用回调函数。

请参阅以下示例。

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


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

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

在上面的例子中,由于javascript运行时的性质,你有时会看到庆祝活动会在run函数之前或之后调用。

跑步时庆祝失败。

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

    //execute the callback
    callbackFunction();
}

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

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

这可确保您在跑步时不庆祝。

干杯。