Pertanyaan “Kesalahan runtime Microsoft JScript: '$' tidak terdefinisi” saat menggunakan Typescript dan jQuery


Saya mendapatkan kesalahan ini mencoba sampel jQuery sederhana dengan Typescript:

"tsc.js (23915, 17) Kesalahan runtime Microsoft JScript: '$' tidak terdefinisi"

Seluruh file .ts saya:

/// <reference path="scripts/jquery-1.8.d.ts" />

$(document).ready(function () {});

The jquery-1.8.d.ts dari DefinitelyTyped, tapi saya mendapatkan kesalahan yang sama jika saya menggunakan jquery.d.ts standar. Saya tidak mendapatkan kesalahan pada tag referensi, itu benar dan menemukan file .d.ts.

Saya jelas kehilangan sesuatu yang mendasar di sini, saya tidak tahu mengapa saya mendapatkan kesalahan ini. Saya sudah memasang ekstensi VS 2012 dan saya mendapatkan full autocomplete di jQuery ... jadi ketika saya mengetik '$' saya mendapatkan popup yang terlengkapi otomatis. File .js yang dihasilkan sudah benar, tidak ada yang salah di sana. File .ts yang jauh lebih kompleks dikompilasi dengan benar dan file output .js baik-baik saja, jadi ini lebih merupakan gangguan daripada kesalahan, saya kira. Atau saya kehilangan kesalahan lain karena kesalahan runtime ini ??

Saya kompilasi dengan menambahkan "External Tool" di VS dengan perintah: C: \ Program Files (x86) \ Microsoft SDKs \ TypeScript \ 0.8.1.1 \ tsc.exe argumen: -e "$ (ItemPath)" --sourcemap


5
2017-12-12 18:57


asal


Jawaban:


Saya percaya masalahnya adalah dengan perintah yang Anda gunakan sendiri, atau setidaknya salah satu opsi yang Anda berikan. "-E" memberitahu compiler untuk "Jalankan skrip setelah kompilasi". Jadi apa yang Anda lihat, "Microsoft runtime error runtime: '$' tidak terdefinisi", bukan kesalahan kompilasi, melainkan kesalahan runtime yang muncul setelah file dikompilasi dan sedang dalam proses dieksekusi.

Semoga itu membantu!


3
2017-12-14 12:39



Anda harus menyertakan jquery.js yang sebenarnya dalam file HTML Anda, misalnya:

<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
2017-12-12 19:02



- Menghapus jawaban asli saya ..

Di mana tepatnya Anda mendapatkan kesalahan: "tsc.js (23915, 17) Microsoft JScript runtime error: '$' tidak terdefinisi"?

Juga dalam topik ini adalah garis besar besar cara mendapatkan kompiler untuk mengkompilasi file .ts Anda di build: http://typescript.codeplex.com/discussions/403394 Setelah itu Anda dapat menyimpan aksi build file .ts Anda di "TypeScriptCompile"


0
2017-12-12 22:54



Tidak tahu kita tidak harus menduplikasi jawabannya ... Saya telah sedikit berubah untuk jawaban lama saya. Ok, Solusi saya adalah:

Saya menggunakan VS 2015, dan saya baru menggunakan naskah. Saya menggunakan jQuery dan selebaran dalam proyek saya.

  1. Unduh semua libraies ini dari manajer NuGet di VS 2015. enter image description here

  2. Seret file pustaka (.js) seperti yang diperintahkan dalam tutorial ini:

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

  1. Ubah file index.html dengan menambahkan baris-baris ini.

    <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. Ubah file index.ts. Pertama tambahkan garis-garis ini di atas untuk referensi pustaka Anda. Anda mungkin perlu mengubah jalurnya.

/// <reference path="jquery.d.ts"/>
/// <reference path="leaflet.d.ts"/>
  1. Tambahkan kode Anda sendiri di dalam onDeviceReady (), jika tidak Anda mungkin mendapatkan error runtime javascript, seperti sysmbol "$" tidak terdefinisi. Saya kira ini karena kode mencoba untuk memuat beberapa fungsi ketika perangkat belum siap. Ini berhasil bagi saya. Semoga itu akan membantu Anda juga.

        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
    
        }
    

0
2018-06-12 02:09