【问题标题】:What is the best way to reference jquery in asp.net?在 asp.net 中引用 jquery 的最佳方法是什么?
【发布时间】:2009-03-18 17:20:37
【问题描述】:

我观看了 Stephen Walther 的 pdc 会话,在演示文稿中他引用了 JQuery js 文件,如下所示:

<asp:ScriptManager id="sm1" runat="server">
<Scripts>
    <asp:ScriptReference Path="~/Scripts/JQuery.js" />
</Scripts>
</asp:ScriptManager>

使用上述方式而不是仅在页面的头部使用链接是否有优点或缺点。

他还将以下内容放入示例页面的 javascript 部分以运行 JQuery:

<script type="text/javascript">

function pageLoad()
{
   $(":text").css("background-color","yellow");
}
</script>

上面的pageLoad是必需的吗?他提到它来自Microsoft AJAX库,它等待DOM完成加载,但我认为JQuery中的$符号只是等待DOM完成加载的简写。

【问题讨论】:

    标签: asp.net jquery


    【解决方案1】:

    $(document).ready() 和 pageLoad() 不一样!

    http://encosia.com/2009/03/25/document-ready-and-pageload-are-not-the-same/

    来自文章:

    pageLoad() 在 DOM 完成加载后被调用。这不是 pageLoad() 被调用的唯一点:它也在每个部分回发之后被调用。

    对于应该运行一次的初始化代码,$(document).ready() 是理想的解决方案。

    【讨论】:

    • 所以,如果我使用的是 Microsoft AJAX 库,我必须调用 pageLoad,但如果我只是使用 JQuery,我不需要,对吗?
    • 您不必这样做,但您可以选择这样做。我个人使用jQuery方式 $(function(){});无论我是否加载了 MS AJAX 库。
    • 我相信 jQuery document ready 和 JavaScript PageLoad 的东西是有区别的...
    • 好吧,我有点困惑,因为在你的回答中,你说如果你使用的是 MAJAX 库,你必须调用 pageLoad,但它似乎只是调用 $(document).ready( ...) 足够好还是我误解了?
    • @Xaisoft - 您应该验证 PageLoad 功能和文档准备就绪之间没有区别。您可以将您的 jQuery 代码放入其中,但您可能仍需要使用 PageLoad 来处理 MSAJAX 内容...
    【解决方案2】:

    使用 ScriptManager,ASP.NET 可以创建单个复合脚本以减少浏览器请求的数量,如果浏览器支持,还可以压缩脚本。

    <asp:ScriptManager ID="ScriptManager1" runat="server">
        <CompositeScript>
            <Scripts>
                <asp:ScriptReference Path="~/Scripts/Script1.js" />
                <asp:ScriptReference Path="~/Scripts/Script2.js" />
                <asp:ScriptReference Path="~/Scripts/Script3.js" />
            </Scripts>
        </CompositeScript>
    </asp:ScriptManager>
    

    【讨论】:

    • 我是新手。单个复合脚本是什么意思?
    • ASP.NET 将所有 .js 文件组合成一个压缩脚本,然后再发送到浏览器。如果您使用多个非缩小脚本,那就太好了。
    【解决方案3】:

    如果您正在查看如何引用 jQuery 文件,这就是我正在做的事情:

    <script type="text/javascript" src="Scripts/jquery.js"></script>
    

    由于您的页面上有 ScriptManager,您还可以点击 PageLoad。

    function pageLoad() {
        //MSAJAX Stuff...  If Needed
    }
    
    $(document).ready(function() {
        $.datepicker.setDefaults($.datepicker.regional[$("#<%= hfCultureAbbreviation.ClientID %>").val()]);
    });
    

    【讨论】:

    • 这就是我通常的做法。为什么需要 PageLoad?而且我对 javascript 很熟悉,那么 Sys.WebForms.PageRequestManager.getInstance() 方法在您的示例中做了什么?
    • @Xaisoft - 它为我创建了 2 个 javascript 函数,这些函数在 AJAX 请求完成后运行,一个在请求被发送回服务器之前运行。这有助于验证等一些 jQuery UI 组件和其他系统需求。
    • JavaScript 新手,所以有点过头了,但感谢您提供的示例。
    【解决方案4】:

    以这种方式通过 ScriptManager 添加脚本的优点是使用 CompositeScript 可以轻松地连接+缩小文件。不幸的是,这意味着它们将通过 ScriptResource.axd 在页面上被引用,我一直认为这是一个极其丑陋的解决方案。

    我对将 juicer 之类的东西集成到我的构建过程中更感兴趣,但为了方便起见,您无法击败 ScriptManager。

    【讨论】:

    • 如果有母版页,是否只把ScriptManager放在母版页中?
    • 这取决于你。如果这样做,您可以在子页面上使用 ScriptManagerProxy。
    • 好的,所以如果您将 ScriptManager 放在母版页中,则不能将另一个 ScriptManager 放在正在使用该母版页的页面上,您必须改用 ScriptManagerProxy。对吗?
    • 不,您需要在内容页面上使用 ScriptManagerProxy 的唯一情况是您需要为该页面使用额外的脚本。
    • 是的,这就是我的意思,但你不能使用两个 ScriptManagers?
    【解决方案5】:

    不要忘记注册 Intellisense 文件!有时会很方便。

    【讨论】:

    • 我很好奇为什么我没有得到智能感知。我在哪里可以找到该文件?
    • 只需将 vsdoc 文件保存在与 jquery-1.3.2-min.js 或 jquery-1.3.2.js 相同的文件夹中
    • 如果 Intellisense 在这样做后不起作用,您可能需要修补程序:
    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多