【问题标题】:"Microsoft JScript runtime error: '$' is undefined" when using Typescript and jQuery使用 Typescript 和 jQuery 时出现“Microsoft JScript 运行时错误:'$' 未定义”
【发布时间】:2012-11-30 13:34:51
【问题描述】:

我在尝试使用 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

【问题讨论】:

  • 嗯,我刚刚发现,如果我将 jQuery 调用包装在 .ts 文件中的函数中,我不会收到此错误。例如,函数 t(){$("#somediv").click()} 不会导致错误。

标签: jquery typescript


【解决方案1】:

您需要在 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>

【讨论】:

  • 我不明白,某些 .html/.aspx 文件与我的 .ts 文件有什么关系?它们没有连接,除了确实有一个 .aspx 文件包含打字稿编译器的结果 .js 输出,但这与打字稿编译器本身的错误无关,对吧? .aspx 文件确实包含 jQuery 并且运行良好,因此这里的任何其他文件都没有问题。
  • 不是 OP,但我遇到了同样的问题,这个解决方案为我解决了问题
【解决方案2】:

--删除了我原来的答案..

您究竟从哪里得到错误:“tsc.js(23915, 17) Microsoft JScript 运行时错误:'$' is undefined”?

本主题中还有一个很好的大纲,介绍了如何让编译器在构建时编译您的 .ts 文件:http://typescript.codeplex.com/discussions/403394 之后,您可以将 .ts 文件的构建操作保留在“TypeScriptCompile”上

【讨论】:

  • 根据我的问题从“工具”菜单执行自定义命令后,VS 输出窗口中显示错误。当然,来自命令行的同样错误。
  • 感谢那里的提示,但它是作为网站而不是项目添加到解决方案中的,因为没有项目文件,我无法为自己做这么简单的事情:\
  • Hmm.. 好吧,我没有其他关于如何解决原始问题的提示,但您也可以尝试 Visual Studio 的“Web Essentials 2012”插件:visualstudiogallery.msdn.microsoft.com/… 它为TypeScript 并在保存时编译您的 .ts 文件。
  • 仅供参考,我正在使用来自 Andrey Taritsyn 的精彩“Bundle Transformer: TypeScript”nuget 包,它让生活变得如此简单(至少在使用捆绑时!)。
【解决方案3】:

我认为问题在于您正在使用的命令本身,或者至少是您传入的选项之一。“-e”告诉编译器“在编译后执行脚本”。因此,您看到的“Microsoft JScript 运行时错误:'$' 未定义”不是编译错误,而是文件编译后出现并正在执行的运行时错误。

希望有帮助!

【讨论】:

  • 啊哈!是的,就是这样。非常感谢。只是表明您应该真正了解您从其他人那里复制和粘贴的内容:)
【解决方案4】:

不知道我们不应该重复答案...我对旧答案进行了一些更改。好的,我的解决方案是:

我使用的是 VS 2015,我是 typescript 的新手。我在项目中使用了 jQuery 和传单。

  1. 从 VS 2015 中的 NuGet 管理器下载所有这些库。

  2. 按照本教程中的说明拖动库文件 (.js):

https://taco.visualstudio.com/en-us/docs/get-started-first-mobile-app/

  1. 通过添加这些行来修改 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>
    
  2. 修改 index.ts 文件。首先将这些行添加到顶部以引用您的库。您可能需要更改路径。

/// <reference path="jquery.d.ts"/>
/// <reference path="leaflet.d.ts"/>
  1. 在 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
    
        }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多