window.onload之后的Javascript?

时间:2009-10-20 09:45:39

标签: asp.net javascript javascript-events

我有一个加载一些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.RegisterStartupScriptthis.Page.ClientScript.RegisterClientScriptBlock或者在上面的.js上调用方法的任何方式向页面编写脚本,这取决于加载的控件在onload事件上。此步骤失败,因为控件尚未在DOM中。

有关如何在window.onload事件后进行通话的任何建议吗?

6 个答案:

答案 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)

如果你可以使用jQuery

然后你可以在DOM加载完成后调用脚本。

$(document).ready()

Introducing $(document).ready()

答案 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)

我尝试了几种方法却没有成功。我刚刚更改了业务需求,脚本由用户操作触发,而不是通过代码注入的脚本。

但对于寻找答案的人来说,有几种可能的候选人可以解决你的问题。