Функция Javascript должна быть запущена при каждой загрузке страницы - PullRequest
0 голосов
/ 06 января 2009

Я смотрю на веб-приложение asp.net 2, которое я поддерживаю (но не написал).

Некоторые вещи, которые должны происходить при загрузке страницы, не происходят, но только иногда, и похоже, что вы используете Firefox 3 внутри виртуальной машины. Используются JQuery и asp.net Ajax.

Важная функция, которая должна запускаться каждый раз (но не работает), прикреплена следующим Javascript:

<script type="text/javascript">
//<![CDATA[
$(document).ready(function(){ Sys.Application.add_load(ImportantFunction); });   
$(document).ready(function(){ Otherstuff(); });
$(document).ready(function(){ MoreStuff(); });
//]]>
</script>

Но если я использую firebug для установки точки останова внутри ImportantFunction (), он не попадает при загрузке страницы в firefox 3, но попадает при обновлении ajax.

На странице есть несколько вызовов $ (document). Уже потому, что они исходят из разных частей кода asp.net. Да, они все выполняют.

Ответы [ 4 ]

5 голосов
/ 06 января 2009

Есть ли причина, по которой вы не можете использовать функцию ASP.NET AJAX pageLoad вместо $ (document) .ready ()?

function pageLoad(sender, args)
{
     ImportantFunction();
     OtherStuff();
     MoreStuff();
}

Это часть жизненного цикла клиентской страницы ASP.NET AJAX, и весь код JavaScript будет выполняться при каждой загрузке страницы, включая асинхронные обратные передачи.

2 голосов
/ 06 января 2009

Вы используете jQuery для присоединения метода «load», который, в свою очередь, присоединяет событие load, и я думаю, что именно в этом ваша проблема.

$(document).ready и Sys.Application.add_load почти одинаковы, или мое понимание таково. Я не совсем уверен, в каком порядке браузер выполнит их.

Я бы предложил удалить вызов Sys.Application.add_load оболочки ImportantFunction, чтобы вы не пытались подключиться к стеку событий, который уже сработал.

1 голос
/ 06 января 2009

Попробуйте это:

<script type="text/javascript">
//<![CDATA[
$(document).ready(ImportantFunction);   
$(document).ready(Otherstuff);
$(document).ready(MoreStuff);
//]]>
</script>

Поместите вызов Sys.Application.add_load в теле ImportantFunction, т.е. в вашем файле .js:

function importantFunction()
{
   Sys.Application.add_load(ImportantFunction);
}

Редактировать: Я не уверен, возможно ли добавить несколько функций для запуска на событии $(document).ready. Может помочь, если вы сделаете это вместо этого:

<script type="text/javascript">
    //<![CDATA[
    $(document).ready(init);   
    //]]>
    </script>

А в init вы можете включить вызовы для всех других функций, т.е.:

function init()
{
   importantFunction();
   otherStuff();
   moreStuff();
   //Any other functions to be called upon page load go here
}

Это также облегчит чтение кода:)

1 голос
/ 06 января 2009

Согласно этой недавней публикации в блоге , это ошибка (или, по крайней мере, ошибка) в FireFox 3. Он предлагает назвать вашу важную функцию PageLoad, чтобы она работала в кросс-браузерном режиме, хотя Я не уверен, будет ли это работать или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...