Javascript函数应该在每个页面加载时运行

时间:2009-01-06 12:41:18

标签: javascript jquery ajax asp.net-ajax

我正在查看我正在维护的asp.net 2 Web应用程序(但没有写)。

页面加载时应该发生的一些事情不会,但有时只会发生,而且似乎是在VM中使用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).ready,因为它们来自后面的asp.net代码的不同部分。是的,他们都会执行。

4 个答案:

答案 0 :(得分:5)

是否有任何理由不能使用ASP.NET AJAX pageLoad函数而不是$(document).ready()?

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

这是ASP.NET AJAX客户端页面生命周期的一部分,内部的所有JavaScript代码都将在每个页面加载时执行,包括异步回发。

答案 1 :(得分:2)

您正在使用jQuery附加“加载”方法,然后反过来附加加载事件,我认为这是您的问题所在。

$(document).readySys.Application.add_load几乎相同,或者我的理解是这样。我不确定浏览器将执行它们的顺序。

我建议删除Sys.Application.add_load上的ImportantFunction包装调用,这样您就不会尝试附加到已经触发的事件堆栈。

答案 2 :(得分:1)

根据这个recent blog posting,这是FireFox 3中的一个错误(或至少是错误的错误)。他建议命名你的重要函数PageLoad以使其跨浏览器工作,尽管我我不确定这是否有效。

答案 3 :(得分:1)

试试这个:

<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
}

它还可以使代码更容易阅读:)