我有一个带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()被调用或其他未知原因(网络延迟?)。
任何建议(信息)都会感激不尽。
答案 0 :(得分:2)
当您确定提交完成后,您应该放置window.close()
。通常以回调的形式出现。通过这种方式,您可以控制发生的事情。
Javascript有一个单独的线程,它可能看起来是顺序的,但事实并非如此。如果您的提交调用服务器,或者使用setTimeout
或setInterval
,则会开始执行某些异步操作,并调用下一个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();});
}
这可确保您在跑步时不庆祝。
干杯。