【发布时间】:2011-04-07 12:25:47
【问题描述】:
我的页面有一些需要在页面加载时运行的 javascript。所说的 javascript 需要定位 ServerControl 的客户端组件,它使用 $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>
必须有更好的方法来处理这个问题。
有什么想法吗?
【问题讨论】:
标签: asp.net-ajax