我有一个页面,其中包含一些需要在页面加载时运行的JavaScript代码。这些代码需要使用$find()方法定位到服务端控件的客户端组件。
当我直接将代码嵌入到页面中时,它会在页面读取时执行,但由于它所依赖的所有内容都还未初始化,因此失败了。
如果我把我的代码放在pageLoad()函数中,它就可以正常运行,因为asp.net会自动为任何名为pageLoad()的函数连接一个onload处理程序。问题是我真的不喜欢pageLoad()的解决方案,主要是因为它只是单个全局名称。如果我使用pageLoad()提交了一些代码,我知道其他程序员会复制该方法并在不合适的地方使用它,最终我们将得到一个包含两个或多个不同pageLoad()函数的页面,并且结果将是一堆神秘的错误,需要花费很长时间才能追踪到。
因此,我将我的代码放在传递给jquery的$(document).ready()的匿名函数中。但这样会失败,因为它在ServerControl的客户端组件存在之前运行。
然后,我将我的代码放在通过Sys.Application.add_load()传递的匿名函数中,但这也会失败,因为Sys未定义。
最后,我决定将我的代码放在Sys.Application.add_load()中,然后将其放在由$(document).ready()调用的函数中。这样做可以正常工作,但是它和pageLoad()一样让我感到非常困扰。
<script type="text/javascript">
$(document).ready(function(){
Sys.Application.add_load(function(){
var component = $find(<clientid>);
if (component) { <do something> }
});
});
</script>
一定有更好的方法来处理这个问题。
有什么想法吗?