У меня есть страница, на которой есть javascript, который нужно запускать при загрузке страницы. Указанный javascript должен найти клиентский компонент ServerControl, который он выполняет с помощью $find().
Конечно, если я испускаю свой код непосредственно на страницу, он выполняется, когда страница читается и терпит неудачу, потому что ничего не зависит от нее еще не инициализирована.
Если я поместил свой код внутри функции pageLoad(), он работает просто отлично, потому что asp.net автоматически подключает обработчик onload для любой функции с именем pageLoad(). Проблема в том, что мне действительно не нравится решение pageLoad() - главным образом потому, что это одно глобальное имя. Если я передаю некоторый код с помощью pageLoad(), я просто знаю, что какой-то другой программист собирается скопировать подход, где-то неуместным, и мы собираемся в конечном итоге со страницей, которая включает в себя две или более разные функции pageLoad() и результатом будет куча загадочных ошибок, которые будут навсегда отслежены.
Итак, я поместил свой код внутри анонимной функции, переданной в jquery $(document).ready(). Это не удается, поскольку оно выполняется до того, как клиентский компонент ServerControl существует.
Итак, я поместил свой код внутри анонимной функции, переданной Sys.Application.add_load(). Это также терпит неудачу, поскольку Sys undefined.
Итак, я наконец решил разместить свой код внутри 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>
Должен быть лучший способ справиться с этим.
Любые идеи?