这不是一个真正的关键问题,我只是不明白为什么它不起作用。我正在将mvc3用于web应用程序,并且我有一个global.js脚本,该脚本包含在_Layout标头中。它运行得很好。
我有一个单独的页面,上面有更多的JS,所以我不想把它全部包含在全局文件中。问题是,javascript只有在页面底部的脚本标记中才有效。如果我把JS放在它自己的文件中,并在页面上或_Layout中使用脚本src标记,那么JS就不会运行。它显示在来源。
我甚至试过移动棋子。如果一个函数或处理程序从页面移动到它自己的文件中,那么该部分就无法工作。未移动的部分继续运行。
代码没有更改。如果我只是把它从页面上取下来,放在它自己的文件中,然后链接到它,代码就不再工作了。两者都使用$(document(.ready(function(((注册函数。两个脚本不允许这样做吗?我唯一能想到的是,正文页(从_Layout的@RenderBody((渲染(无法链接到脚本。
您是如何引用那些外部js文件的?您应该使用URL帮助程序来确保它们的正确路径:
<script src="@Url.Content("~/Scripts/myscript.js")" type="text/javascript"></script>
现在,在这个外部myscript.js
中,根据您是在<head>
部分还是在结束</body>
之前的末尾引用它,您是否应该使用$(document).ready
。
您可以在_Layout.cshtml
:中定义一个scripts
部分
...
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
@RenderSection("scripts", false)
</body>
每个视图都可以使用它来包含其特定的脚本:
@section scripts {
<script src="@Url.Content("~/Scripts/myscript.js")" type="text/javascript"></script>
}
最后,在myscript.js
中,您可以直接操作DOM,而无需在document.ready
:中进行包装
$('form').submit(function() {
alert('submitting a form');
});
您可以包含任意多的外部脚本(尽管您应该根据YSlow的建议将它们的数量严格减少到最低限度,以避免额外的HTTP连接(
我只是假设您的javascript中存在拼写错误。尝试用Firebug或Chrome加载页面,并查看错误日志;