应该将带有jquery代码的脚本块放在哪里放在ASP.NET MVC母版页上?

时间:2008-11-23 05:25:06

标签: jquery asp.net-mvc

开始使用jquery并且无法获得asp.net mvc的hello world类型示例。尝试使用此脚本加载页面时,我收到运行时错误“对象预期”。

一个。脚本标记应放在母版页中的哪个位置? B.我可能做错了什么?我的页面中肯定有“a”元素?

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

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

            <script type="text/javascript">
                $(document).ready(function() {
                    $("a").click(function(event) {
                        alert("Thanks for visiting!");
                    });
                });
            </script>

4 个答案:

答案 0 :(得分:11)

嗯...

回答您的第一个问题:应将它们放在<head>元素中。

此外,通常我在DOM中下沉事件时使用'bind' method(就像你想要做的那样)。

因此,代码看起来像:

$(document).ready(function()
{
    //  Bind each link to a handler:
    $("a").bind('click dblclick', function(event)
    {
         alert('click');
    })
});

另外,一些设计技巧(因为你正在处理我心中的事情(使用jQuery的ASP.NET MVC):

在母版页{h} <head>元素的底部添加额外的'ContentPlaceHolder'。这将允许您在其正确的位置运行页面特定的javascript:在页面的“head”部分,它将允许您制作特定于页面的javascript包含。

它看起来像这样:

    <asp:ContentPlaceHolder ID="HeadContent" runat="server" />
</head>

为什么这有用?我会告诉你:你正在使用的jQuery圆角插件可能只用在几个页面上 - 为什么要在每个页面上包含它?

答案 1 :(得分:2)

我同意Dan添加内容占位符以便在脚本中进行链接。但是,头部通常不是将JavaScript放在性能方面的最佳位置。最好的地方是在页面的底部。因此,您的HTML可以在JavaScript之前加载。见Yahoo's YSlow tip。你的代码仍应在head部分工作。

我喜欢将我网站的大部分JavaScript放在一个文件中,并将其链接到所有页面。如果它变得非常大,你可以将它分成几个文件。这利用了浏览器的缓存。

关于jQuery代码有什么问题。我不确定。看起来很正确。我唯一想知道的是事件参数。试着完全解决这个问题。我知道函数允许参数,但我通常使用“this”代替。另外,请尝试重命名参数。

答案 2 :(得分:1)

B)我在快速测试页面检查了您的内联脚本,它运行正常,所以我建议使用 Firefox 并安装 FireBug 插件来查找问题:

  • 在Firebug的“脚本”选项卡中,使用右侧的“监视”窗口插入并检查脚本的部分内容,并查看它们返回的内容。
  • 我首先将$置于监视窗口并检查它是否被识别为function():或许jQuery没有属性链接
  • 然后将$("a")放入监视窗口并检查它返回的集合是否具有正确的数字 对应于集合中“a”选择器的项目
  • 继续运行脚本部分直到遇到错误

答案 3 :(得分:1)

母版页通常存储在/Views/Shared/Site.Master中,而脚本位于/ Scripts中,所以这些:

<script src="../Scripts/jquery-1.2.6.min.js" type="text/javascript"></script>            
<script src="../Scripts/jquery.corner.js" type="text/javascript"></script>

应该是

<script src="../../Scripts/jquery-1.2.6.min.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.corner.js" type="text/javascript"></script>

但我建议使用帮手:

  public static class Helper
    {
        private static string ScriptsRoot = "~/scripts/";

        public static string ScriptUrl (string scriptFile)
        {
            return VirtualPathUtility.ToAbsolute (ScriptsRoot + scriptFile);
        }
    }

然后像这样引用你的脚本:

<script type="text/javascript" src="<%= Helper.ScriptUrl("jquery-1.2.6.min.js") %>"></script>
<script type="text/javascript" src="<%= Helper.ScriptUrl("jquery.corner.js") %>"></script>