这不是一个真正的关键问题,我只是不明白为什么它不起作用。我使用mvc3作为Web应用程序,我有一个global.js脚本,我包含在_Layout标头中。它运行得很好。
我有一个页面上有更多的JS,所以我不想将它全部包含在全局文件中。问题是,javascript仅在页面上,底部,脚本标记中有效。如果我将JS放在自己的文件中并使用脚本src标记,无论是在页面上还是在_Layout中,JS都不会运行。它虽然出现在源头。
我甚至尝试过移动件。如果函数或处理程序从页面移动到它自己的文件,那么该部分就不起作用。不为所动的部分继续运行。
没有更改代码。如果我只是将它从页面中拉出来,将其放在自己的文件中,并链接到它,代码就不再有效了。两个寄存器函数都带有$(document).ready(function())。是不允许两个脚本执行此操作?我能想到的另一件事是身体页面(从_Layout的@RenderBody()渲染)无法链接到脚本。
答案 0 :(得分:2)
您是如何引用这些外部js文件的?您应该使用URL帮助程序来确保它们的正确路径:
<script src="@Url.Content("~/Scripts/myscript.js")" type="text/javascript"></script>
现在位于此外部myscript.js
内,取决于您是在<head>
部分中引用它还是在结束</body>
之前结束时,您应该使用$(document).ready
。
您可以做的是在scripts
中定义_Layout.cshtml
部分:
...
<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 recommendations进行额外的HTTP连接)
答案 1 :(得分:0)
我只是假设您的javascript中存在拼写错误。尝试使用Firebug或Chrome加载页面,并查看日志中的错误;