我有一个加载一些javascript脚本的asp.net页面。
其中一个脚本将一些控件加载到页面中,并将它们附加到window.onload
事件中的正文。
我需要通过代码注入脚本来调用依赖于window.onload中创建的控件的脚本方法。这不起作用,因为每次调用都会使它始终提前,并且此时不会创建控件。例如,如果我通过超链接中的onclick
来调用它,则可以使用,因为控件已在onload
中创建。
所以:
1 - <script type="text/javascript" src="/Scripts/somefile.js"></script>
2 - addEvent(window, "load", blabla);
- 上面的js准备在onload事件上附加到正文的一些控件
3 - 在后面的代码中,我尝试通过this.Page.ClientScript.RegisterStartupScript
或this.Page.ClientScript.RegisterClientScriptBlock
或者在上面的.js上调用方法的任何方式向页面编写脚本,这取决于加载的控件在onload事件上。此步骤失败,因为控件尚未在DOM中。
有关如何在window.onload
事件后进行通话的任何建议吗?
答案 0 :(得分:3)
创建一系列函数:
<script>
var onLoadFunctions = [];
function addOnLoad(funcName) {
onLoadFunctions[onLoadFunctions.length] = funcName;
}
function executeOnLoad() {
for (var i=0; i<onLoadFunctions.length; i++) onLoadFunctions[i]();
}
addOnLoad(foobar);
addOnLoad(blabla);
addOnLoad(theother);
window.onload = executeOnLoad;
</script>
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以像注册启动脚本一样注册js文件:
this.Page.ClientScript.RegisterClientScriptInclude("scriptKey", "/Scripts/somefile.js");
答案 3 :(得分:1)
使用Prototype JavaScript,您可以在DOM准备就绪时调用脚本(see the API here):
document.observe("dom:loaded", function() {
alert('The DOM is ready.');
});
我建议将onload
事件中加载的脚本移动到dom:loaded
事件。
答案 4 :(得分:1)
取而代之的是window.onload,您可以在示例摘要下面使用document.onreadystatechange事件..
document.onreadystatechange=onReady;
function onReady() {
if (document.readyState=="complete") {
alert('The document ready state is "complete"')
}
答案 5 :(得分:0)
我尝试了几种方法却没有成功。我刚刚更改了业务需求,脚本由用户操作触发,而不是通过代码注入的脚本。
但对于寻找答案的人来说,有几种可能的候选人可以解决你的问题。