我正在查看我正在维护的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代码的不同部分。是的,他们都会执行。
答案 0 :(得分:5)
是否有任何理由不能使用ASP.NET AJAX pageLoad函数而不是$(document).ready()?
function pageLoad(sender, args)
{
ImportantFunction();
OtherStuff();
MoreStuff();
}
这是ASP.NET AJAX客户端页面生命周期的一部分,内部的所有JavaScript代码都将在每个页面加载时执行,包括异步回发。
答案 1 :(得分:2)
您正在使用jQuery附加“加载”方法,然后反过来附加加载事件,我认为这是您的问题所在。
$(document).ready
和Sys.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
}
它还可以使代码更容易阅读:)