首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegisterStartupScript和执行顺序

RegisterStartupScript和执行顺序
EN

Stack Overflow用户
提问于 2009-09-16 21:12:56
回答 2查看 4.6K关注 0票数 7

我正在使用ScriptManager.RegisterStartupScript注册对大量JS函数的调用。

代码语言:javascript
复制
ScriptManager.RegisterStartupScript(this, this.GetType(), "Script1", "SomeScript1", true);
ScriptManager.RegisterStartupScript(this, this.GetType(), "Script2", "SomeScript1", true);
ScriptManager.RegisterStartupScript(this, this.GetType(), "EndScript", "EndScript", true);

当呈现HTML时,它会按顺序添加它们。

代码语言:javascript
复制
<script type="text/javascript">
//<![CDATA[
other functions calls..
SomeScript1();SomeScript2();EndScript();
//]]>
</script>

然而,当我在调试模式下单步执行时,脚本的执行没有按顺序进行(例如:EndScriptSomeScript1SomeScript2之前先执行)

ScriptManager.RegisterStartupScript不是按照添加的顺序执行gaurantee吗?如果不是,有什么替代方案(我希望总是在最后执行EndScript )

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-16 21:27:03

RegisterStartupScript的MSDN页面

不保证使用RegisterStartupScript注册的

启动脚本块的输出顺序与其注册顺序相同。如果启动脚本块的顺序很重要,请使用StringBuilder对象将脚本块收集到单个字符串中,然后将它们全部注册为单个启动脚本。

在它们呈现到页面之后,脚本的实际执行由浏览器处理,与ScriptManager控件没有任何关系。查看您发布的示例,浏览器应该按照它们编写的顺序执行它们。您的EndScript函数也能被页面上的其他东西调用吗?此外,如果您使用任何类型的回调,则回调何时完成的时间是不确定的。您能提供每个脚本中的代码的示例吗?

票数 6
EN

Stack Overflow用户

发布于 2009-09-17 15:43:28

您所显示的输出肯定会按此顺序运行。

如果EndScript从其主体内部发出对SomeScriptX()的调用,则SomeScriptX有可能在setTimeout完成其工作之前就开始执行。

或者,也许“其他函数调用..”在某处调用了EndScript()

无论哪种方式,如果您可以保证ScriptManager在其输出中呈现的顺序是准确的,那么这就是JavaScript执行它们的顺序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1435503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档