我在使用Typescript尝试一个简单的jQuery示例时遇到此错误:
“tsc.js(23915,17)Microsoft JScript运行时错误:'$'未定义”
我的整个.ts文件:
/// <reference path="scripts/jquery-1.8.d.ts" />
$(document).ready(function () {});
jquery-1.8.d.ts来自DefinitelyTyped,但如果我使用标准的jquery.d.ts,我会得到同样的错误。我没有在引用标记上出现任何错误,它是正确的并且正在找到.d.ts文件。
我显然遗漏了一些基本的东西,我无法弄清楚为什么我会收到这个错误。我安装了VS 2012扩展程序并在jQuery上获得完全自动完成功能...所以当我输入'$'时,我会获得自动完成弹出窗口。生成的.js文件是正确的,没有错。一个更复杂的.ts文件正在正确编译,输出.js文件非常好,所以这更像是一个烦恼而不是错误,我想。或者我因为运行时错误而遗漏了其他错误?
我正在通过在VS中添加“外部工具”进行编译 命令:C:\ Program Files(x86)\ Microsoft SDKs \ TypeScript \ 0.8.1.1 \ tsc.exe 参数:-e“$(ItemPath)” - sourcemap
答案 0 :(得分:3)
我认为问题在于您正在使用的命令,或者至少传递的一个选项。“ - e”告诉编译器“编译后执行脚本”。所以你看到的,“Microsoft JScript运行时错误:'$'未定义”,不是编译错误,而是在编译文件后正在执行的过程中出现的运行时错误。
希望有所帮助!
答案 1 :(得分:2)
您需要在HTML文件中包含真实的jquery.js,例如:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script type="text/javascript" src="myApp.js"></script>
答案 2 :(得分:0)
- 删除了原来的答案..
你究竟在哪里得到错误:“tsc.js(23915,17)Microsoft JScript运行时错误:'$'未定义”?
此主题中还概述了如何让编译器在build上编译.ts文件:http://typescript.codeplex.com/discussions/403394 之后,您可以将.ts文件的构建操作保留在“TypeScriptCompile”
上答案 3 :(得分:0)
不知道我们不应该重复答案......我已经改变了一点我的旧答案。好的,我的解决方案是:
我正在使用VS 2015,我是typescript的新手。我在我的项目中使用了jQuery和leaflet。
按照本教程中的说明拖动库文件(.js):
https://taco.visualstudio.com/en-us/docs/get-started-first-mobile-app/
通过添加这些行来修改index.html文件。
<link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css" />
<link rel="stylesheet" href="css/leaflet.css" />
<script src="scripts/jquery-2.2.3.min.js"></script>
<script src="scripts/jquery.mobile-1.4.5.min.js"></script>
<script src="scripts/leaflet-0.7.3.min.js"></script>
修改index.ts文件。首先在顶部添加这些行以引用您的库。您可能需要更改路径。
/// <reference path="jquery.d.ts"/>
/// <reference path="leaflet.d.ts"/>
在onDeviceReady()中添加您自己的代码,否则您可能会收到javascript运行时错误,例如sysmbol“$”未定义。我想这是因为当设备尚未准备好时,代码会尝试加载某些功能。这对我有用。希望它也能帮到你。
function onDeviceReady() {
document.addEventListener('pause', onPause, false);
document.addEventListener('resume', onResume, false);
var parentElement = document.getElementById('deviceready');
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
// your code goes in here
}