提问人:Bob Horn 提问时间:2/27/2013 最后编辑:CommunityBob Horn 更新时间:2/27/2013 访问量:1991
不显眼的 JavaScript - 未找到单独的 JS 文件
Unobtrusive JavaScript - Separate JS File Not Found
问:
使用不显眼的 JavaScript 这个概念,我第一次尝试将我的 JavaScript 放在一个独立于 HTML 的文件中。但是,无论我做什么,我都会收到一个错误,即找不到该文件。
这是谷歌浏览器控制台(ctrl-shift-j)中的实际错误:
GET http://localhost:14385/Home/TestPage.js 404 (Not Found)
我从一个新的 MVC 4 应用程序开始。我创建了一个新的测试页面:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta name="viewport" content="width=device-width" />
<script src="TestPage.js"></script>
<title></title>
</head>
<body>
<div>
<input id="foo" value="snuh" />
</div>
</body>
</html>
我在同一文件夹中创建了一个新的 TestPage.js:
$(document).ready(function() {
function dosomething() {
alert('snuh');
}
document.getElementById('foo').onclick = dosomething;
});
我已经尝试了此处发布的提示,但我总是收到找不到 JavaScript 文件的错误。知道这个简单的测试有什么问题吗?
注意:TestPage 实际显示,并显示输入框。
这是解决方案资源管理器中的布局:This is the layout in solution explorer:
答:
确保使用服务器端帮助程序从正确的位置引用 javascript:
<script src="<%= Url.Content("~/TestPage.js") %>"></script>
无论您从哪个位置呈现此视图,这都将正确引用 javascript 文件。它显然假设您已将 javascript 文件放在应用程序的根目录中。约定是使用 Scripts 文件夹来实现此目的:
<script src="<%= Url.Content("~/Scripts/TestPage.js") %>"></script>
更新:
现在您已经展示了您的项目结构,您似乎已将文件放在文件夹中。这是行不通的。无法从客户端访问此文件夹。IIS 明确禁止且不提供此功能。你不应该在里面放置任何静态文件。将 javascript 文件夹移动到该文件夹。TestPage.js
~/Views
~/Scripts
此外,您似乎在文件中使用了jQuery,但您从未引用过它,因此您的脚本将无法正常工作。如果要使用 jQuery,请确保也已添加它:TestPage.js
<script src="<%= Url.Content("~/Scripts/jquery-1.8.2.js") %>"></script>
<script src="<%= Url.Content("~/Scripts/TestPage.js") %>"></script>
或者,如果您不想使用 jQuery,请修复您的脚本,使其不依赖于它:
function dosomething() {
alert('snuh');
}
window.onload = function() {
document.getElementById('foo').onclick = dosomething;
};
或者,如果你把脚本放在 DOM 的末尾,你甚至不需要把它们包装在一个文档就绪的处理程序中,因为在这个阶段,DOM 已经准备好了,你可以操作它:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>
<input id="foo" value="snuh" />
</div>
<script src="<%= Url.Content("~/Scripts/TestPage.js") %>"></script>
</body>
</html>
然后在脚本中:
function dosomething() {
alert('snuh');
}
document.getElementById('foo').onclick = dosomething;
评论
<%= Url.Content() %>
<script src="~/Scripts/TestPage.js"></script>
~/
评论