Asp.net 将jQuery引用放在HTML文档的底部会破坏用户控制
提供了一个很好的答案。他引用了雅虎卓越绩效团队所做的工作以及他们对雅虎的推荐。这是我一直遵循的一条硬性规定。在同一条帖子中,我指出“JavaScript的最佳位置是在你需要它之前”,这就是我现在所处的困境 我在页面末尾添加了对jQuery的引用,但遇到了一个问题,即如何构造我希望添加客户端功能的用户控件。具体来说,我很难找到适应依赖关系的最佳方法。用户控件有一个span标记,其中包含一个数值,我希望根据用户在用户控件中选中的复选框的数量来更新该数值。我使用jQuery查找span标记并更新其文本属性 不幸的是,除非我对jQuery的引用出现在用户控件之前,否则我会收到JavaScript错误。这是有意义的,因为控件引用的是尚未添加的函数。我可以想出几个解决这个问题的办法,但我正在寻找一个最佳实践方案Asp.net 将jQuery引用放在HTML文档的底部会破坏用户控制,asp.net,javascript,jquery,html,user-controls,Asp.net,Javascript,Jquery,Html,User Controls,提供了一个很好的答案。他引用了雅虎卓越绩效团队所做的工作以及他们对雅虎的推荐。这是我一直遵循的一条硬性规定。在同一条帖子中,我指出“JavaScript的最佳位置是在你需要它之前”,这就是我现在所处的困境 我在页面末尾添加了对jQuery的引用,但遇到了一个问题,即如何构造我希望添加客户端功能的用户控件。具体来说,我很难找到适应依赖关系的最佳方法。用户控件有一个span标记,其中包含一个数值,我希望根据用户在用户控件中选中的复选框的数量来更新该数值。我使用jQuery查找span标记并更新其文本
- 缺点:如果将用户控件放在中继器中,将对jQuery库进行多个引用
- 缺点:我最终会在多个地方使用相同的代码,这会造成一个潜在的维护噩梦
- 缺点:如果页面不包含对jQuery的引用,我违反了对的建议,并创建了一个不可用的用户控件
这些就是我在考虑解决这个问题时想到的选择和缺点。我当然愿意接受关于更好解决方案的建议,除非没有人寻求我应该选择哪一种解决方案的建议。另一个选择是通过注册用户控件的启动脚本来动态生成脚本引用,该用户控件将脚本引用写入文档头
javascript函数可以检查现有的jQuery引用,如果没有找到,则写出引用。这将解决多个引用的问题。我们讨论了一个基本的例子。我发现最简单的解决方案是使用助手累积Javascript片段,在呈现其他页面元素时包含在页面正文中。然后,您可以首先包含jQuery,然后是任何延迟的文本Javascript片段
它确实需要在页面生成期间维护一些额外的状态,这可能会使渲染管道稍微复杂一些。但是,它允许您获得延迟的Javascript包含,而无需在页面加载后进行复杂的DOM操作,以找出对jQuery的任何现有引用。有一个Google项目,旨在解决您可能希望看到的这些难题,称为Jingo: 我推荐的另一个解决方案是像YUI loader实用程序这样的加载程序 它将允许您管理依赖项等,而且它不仅在您使用它们的UI组件时有用。它可以用来做任何事情;只要看看addModule周围的文档就可以了
如果您使用的是ASP.NET,ScriptManager是另一个很好的解决方案。我不知道您使用的是什么语言或工具包,但这里有一个概述:使用
addToHeader
和addToFooter
方法创建一个名为JSHelper
的单例类,每个变量都接受一个字符串参数,并将其附加到header
或footer
数组实例变量。然后,在模板或呈现方法中,在页面的部分调用相应的outputHeader()
,并在标记前面调用outputFooter()
。(这些的实现留给读者作为练习。)