我几乎说明了我要问的问题。但是在asp.net网站上收集所有外部.js文件并将它们放在主页上的结束标记之前好吗?
我只是关注yslow和google的速度。我无法合并这些javascripts,所以我试图加载它们“页面加载后”,但这样做会使它们变得无用; 我的一些jquery事情不起作用。
我将.js文件移到了开始的body标签上方,然后就可以了。我究竟做错了什么?我怎样才能在页面加载后加载我的.js文件?感谢任何人提供的任何建议!
答案 0 :(得分:2)
“在asp.net网站上将javascript放在关闭正文标记之前好吗?”
简短回答。是。
答案很长。这取决于JavaScript。
有些事情在页面加载后可能无法正常工作,因为正如所写的那样,他们只需要需要来加载DOMReady中或之前的某些资源,后续逻辑可能会依赖它。也就是说,如果你有任何jQuery在DOMReady上添加图像,然后需要处理这些图像,获得它们的高度或其他任何东西,你可能会有一些代码在页面加载时运行(在加载图像之后)。如果页面已加载,则此策略不起作用。 onload
不会发射两次,IIRC。
是否必须以这种方式编写?不,编写一些仅在每个图像(或任何其他资源)已被验证已加载后运行的代码可能会更好,如果您有正确的代码片段,这通常很容易,但它不是琐碎的,或者。
“我做错了什么?在页面加载后如何加载我的.js文件?”
有些方法可以做“错误”的事情,而且我敢打赌,人们可能会写出各种检查的整章,但仍未涵盖所有情况。我不是说这会阻止你尝试重写,以便在页面加载后加载它们,因为我认为覆盖常见的案例很容易 - 我只是不相信自己准确地列出最常见的案例。
答案 1 :(得分:1)
即使在asp.net网站上,也可以将js文件放在关闭正文标记之前,这通常被认为是最佳做法。尽管如此,它可能会让母版有点恼人/棘手/混乱。
从好的方面来说,你只需要引用jquery(或其他)一次就可以了。但是如果你在你的身体控件/部分中使用javascript / jquery,它将在你的母版页上的文件加载之前执行。
您可以采取以下措施来对抗这些竞争条件......
将您的javascript包裹在window.onload = function() { /*your code*/ }
中。这将等到页面完成加载(图像,外部文件等)之后才被调用。
我的选择(使用asp.net MVC)是使用RenderSection()
。 Details here。 Webforms中可能有一个等价物,也许有人可以在那里发声。
答案 2 :(得分:1)
正如他们在评论中所说,JavaScript从上到下加载。因此,如果在您的身体中调用您在脚本中定义的函数,该函数将在以后加载,您可能/将会出错。 您可能想要做的是将这些脚本(正文中间的脚本)移动到它自己的文件中,并用文档准备好的文件围绕它们。
$(document).ready(function () {
//Your code in here
});
这将保证在文档dom准备好后执行代码。 另外,请确保在库和依赖项之后添加此文档。
这也将使您的JavaScript更易于维护。