Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将jQuery引用放在HTML文档的底部会破坏用户控制_Asp.net_Javascript_Jquery_Html_User Controls - Fatal编程技术网

Asp.net 将jQuery引用放在HTML文档的底部会破坏用户控制

Asp.net 将jQuery引用放在HTML文档的底部会破坏用户控制,asp.net,javascript,jquery,html,user-controls,Asp.net,Javascript,Jquery,Html,User Controls,提供了一个很好的答案。他引用了雅虎卓越绩效团队所做的工作以及他们对雅虎的推荐。这是我一直遵循的一条硬性规定。在同一条帖子中,我指出“JavaScript的最佳位置是在你需要它之前”,这就是我现在所处的困境 我在页面末尾添加了对jQuery的引用,但遇到了一个问题,即如何构造我希望添加客户端功能的用户控件。具体来说,我很难找到适应依赖关系的最佳方法。用户控件有一个span标记,其中包含一个数值,我希望根据用户在用户控件中选中的复选框的数量来更新该数值。我使用jQuery查找span标记并更新其文本

提供了一个很好的答案。他引用了雅虎卓越绩效团队所做的工作以及他们对雅虎的推荐。这是我一直遵循的一条硬性规定。在同一条帖子中,我指出“JavaScript的最佳位置是在你需要它之前”,这就是我现在所处的困境

我在页面末尾添加了对jQuery的引用,但遇到了一个问题,即如何构造我希望添加客户端功能的用户控件。具体来说,我很难找到适应依赖关系的最佳方法。用户控件有一个span标记,其中包含一个数值,我希望根据用户在用户控件中选中的复选框的数量来更新该数值。我使用jQuery查找span标记并更新其文本属性

不幸的是,除非我对jQuery的引用出现在用户控件之前,否则我会收到JavaScript错误。这是有意义的,因为控件引用的是尚未添加的函数。我可以想出几个解决这个问题的办法,但我正在寻找一个最佳实践方案

  • 在用户控件内部放置对jQuery库的引用。
    • 缺点:如果将用户控件放在中继器中,将对jQuery库进行多个引用
  • 在用户控件中不使用JavaScript,并编写所有代码来更新包含页面中用户控件的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()
    。(这些的实现留给读者作为练习。)