JQuery - $ tidak didefinisikan

486

Saya memiliki acara klik jquery sederhana

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

dan referensi jquery yang ditentukan di site.master

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

Saya telah memeriksa bahwa skrip sedang diselesaikan dengan benar, saya dapat melihat markup dan melihat skrip secara langsung di firebug, jadi saya harus ditemukan. Namun, saya masih mendapatkan:

$ tidak didefinisikan

dan tidak ada jquery yang berfungsi. Saya juga sudah mencoba berbagai variasi seperti $ (dokumen). Sudah dan jQuery dll.

Ini adalah aplikasi MVC 2 di .net 3.5, saya yakin saya benar-benar padat, di mana-mana di google mengatakan untuk memeriksa file direferensikan dengan benar, yang telah saya periksa dan periksa lagi, mohon saran! : /

Paul Creasey
sumber
6
Apakah Anda benar-benar melihat jquery-1.3.2.js meminta dan memuat dengan kode respons HTTP200, jika Anda memeriksa pemuatan halaman dengan alat Fiddler?
naivists
18
Apakah skrip Anda dieksekusi sebelum jquery?
Surya
2
Bisakah Anda melihat sumber dan mengklik tautan js. Sepertinya jquery Anda tidak dimuat di halaman. Coba Layar Konsol Firebug untuk Melihat kesalahan Coba juga ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js di tag skrip Anda
nemke
2
Apakah skrip Anda diaktifkan sebelum sumber jquery dimuat?
Dave Bacher
1
@ Surya / Dave, saya sudah pulang sekarang, jadi saya akan memeriksanya lagi besok, dan kembali dan memposting, tapi saya pikir itu mungkin masalahnya,: / memalukan!
Paul Creasey

Jawaban:

560

Kesalahan itu hanya dapat disebabkan oleh satu dari tiga hal:

  1. File JavaScript Anda tidak dimuat dengan benar ke halaman Anda
  2. Anda memiliki versi jQuery yang gagal. Ini bisa terjadi karena seseorang mengedit file inti, atau sebuah plugin mungkin telah menimpa variabel $.
  3. Anda memiliki JavaScript yang berjalan sebelum halaman dimuat penuh, dan dengan demikian, sebelum jQuery terisi penuh.

Pertama-tama, pastikan, script apa yang dipanggil dengan benar, seharusnya terlihat seperti itu

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

dan seharusnya tidak memiliki atribut async atau defer .

Maka Anda harus memeriksa panel jaring Firebug untuk melihat apakah file tersebut benar-benar dimuat dengan benar. Jika tidak, itu akan disorot merah dan akan mengatakan "404" di sebelahnya. Jika file dimuat dengan benar, itu berarti bahwa masalahnya adalah nomor 2.

Pastikan semua kode javascript jQuery dijalankan di dalam blok kode seperti:

$(document).ready(function () {
  //your code here
});

Ini akan memastikan bahwa kode Anda dimuat setelah jQuery diinisialisasi.

Satu hal terakhir yang perlu diperiksa adalah memastikan bahwa Anda tidak memuat plugin apa pun sebelum Anda memuat jQuery. Plugin memperpanjang objek "$", jadi jika Anda memuat plugin sebelum memuat jQuery core, maka Anda akan mendapatkan kesalahan yang Anda jelaskan.

Catatan: Jika Anda memuat kode yang tidak memerlukan jQuery untuk menjalankannya, tidak perlu ditempatkan di dalam penangan siap jQuery. Kode itu dapat dipisahkan menggunakan document.readyState.

Mike Trpcic
sumber
182
Mengenai blok kode Anda, $(document)tidak akan berfungsi kecuali Anda memiliki tag skrip termasuk jQuery sebelum pernyataan itu ...
PatrikAkerstrand
3
Saya ingin menambahkan bahwa saya memiliki masalah yang sama dengan OP dan masalah saya adalah bahwa menggunakan https dengan perpustakaan jquery tidak berfungsi dengan baik.
Mike Cheel
20
(fungsi ($) {}) (jQuery);
JackMahoney
2
@ Patrik: Lihat jawaban saya untuk solusi menggunakan bagian skrip dalam tampilan. Dengan cara ini jquery akan dimuat lebih dulu dan $ didefinisikan dengan benar.
angularsen
1
Periksa apakah Anda memiliki async pada skrip juga, itulah yang menyebabkan masalah dalam kasus saya.
Anders
207

Bisa jadi Anda memiliki tag skrip Anda dipanggil sebelum skrip jquery dipanggil.

<script type="text/javascript" src="js/script.js"></script>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

Hasil ini sebagai $ tidak didefinisikan

Letakkan jquery.js sebelum tag skrip Anda dan itu akan berfungsi;) seperti:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

<script type="text/javascript" src="js/script.js"></script>
Hanky ​​Panky
sumber
1
Ini respons yang bagus. Saya mencobanya dan itu berhasil untuk saya. Saya menggunakan VS 2013 dan ASP.net. Apakah Anda tahu bagaimana saya dapat membuat javascript dimuat sebelum halaman dimuat secara otomatis di asp.net atau apakah saya harus merujuk javascript dengan cara ini di semua file saya?
Pat
Untuk menambah jawaban Anda. Di ASP.net Anda dapat masuk ke Shared_Layout.cshtml `<head> </head>`
Pat
@pat dan pastikan Anda menulis kode Anda di dalam @section Scriptstag
Marc
Harap perbarui jawaban untuk menggunakan HTTPS dan pertimbangkan penggunaan SPI devdocs.io/html/attributes#integrity-attribute
Josh Habdas
66

Pertama, Anda perlu memastikan bahwa skrip jQuery dimuat. Ini bisa dari CDN atau lokal di situs web Anda. Jika Anda tidak memuat ini terlebih dahulu sebelum mencoba menggunakan jQuery, ia akan memberi tahu Anda bahwa jQuery tidak didefinisikan.

<script src="jquery.min.js"></script>

Ini bisa di HEAD atau di footer halaman, pastikan Anda memuatnya sebelum Anda mencoba memanggil hal jQuery lainnya.

Maka Anda perlu menggunakan salah satu dari dua solusi di bawah ini

(function($){
// your standard jquery code goes here with $ prefix
// best used inside a page with inline code, 
// or outside the document ready, enter code here
 })(jQuery); 

atau

jQuery(document).ready(function($){
// standard on load code goes here with $ prefix
// note: the $ is setup inside the anonymous function of the ready command
});

perlu diketahui bahwa berkali-kali $ (dokumen). sudah (fungsi () {// kode di sini}); tidak akan bekerja.

Andrew Killen
sumber
1
"jQuery tidak didefinisikan". Itu ada setelah pemuatan halaman.
Paul Totzke
Tidak yakin apakah ini pertanyaan atau pernyataan, tetapi, saya akan memeriksa Anda membuat panggilan untuk skrip jQuery sebelum Anda mencoba menggunakannya. Sepertinya Anda memuatnya di footer dan memanggil hal-hal yang lebih tinggi di halaman.
Andrew Killen
Maaf, saya pikir ini adalah teknik yang bisa Anda gunakan skrip dalam urutan apa pun. Ya saya menggunakan ini di bagian tubuh dengan gaya MVC. mycode.js lalu jQuery.js adalah 2 hal terakhir pada halaman.
Paul Totzke
Jangan khawatir Paul, saya sudah mengedit solusi untuk memasukkan 'Anda harus ... memuat dulu'. :)
Andrew Killen
Apakah ini memperbaiki masalah "Script saya berada di urutan yang benar tetapi skrip dimuat dalam urutan yang berbeda". Saya ingat melakukan sesuatu seperti ini pada 4 tahun yang lalu tetapi saya tidak dapat mengingat masalah apa yang diselesaikan.
Paul Totzke
50

Jika panggilan plugin jQuery di sebelahnya </body>, dan skrip Anda dimuat sebelum itu, Anda harus membuat kode Anda berjalan setelah window.onloadacara, seperti ini:

window.onload = function() {
  //YOUR JQUERY CODE
}

`

jadi, kode Anda akan berjalan hanya setelah jendela dimuat, ketika semua aset telah dimuat. Pada titik itu, jQuery ( $) akan ditentukan.

Jika Anda menggunakannya:

$(document).ready(function () {
  //YOUR JQUERY CODE
});

`

yang $belum ditentukan saat ini, karena itu disebut sebelum jQuery dimuat, dan script Anda akan gagal pada baris pertama pada konsol.

dandapereira
sumber
Umumnya ide buruk untuk diikat ke window.unload. Ini akan secara efektif menjadi satu-satunya acara yang berjalan !!!
Rudi Strydom
Catatan: Ingat Anda hanya dapat menetapkan satu fungsi window.onload, jika Anda menetapkan fungsi lainnya, fungsi sebelumnya tidak akan dieksekusi.
Bruno Peres
28

Saya hanya melakukan hal yang sama dan menemukan saya memiliki banyak

type="text/javacsript"

Jadi mereka memuat, tetapi tidak ada petunjuk lebih lanjut mengapa itu tidak bekerja. Tak perlu dikatakan, ejaan yang tepat memperbaikinya.

George R
sumber
Catatan Moderator : kesalahan ketik dalam posting ini disengaja , untuk menggambarkan suatu hal. Tolong jangan edit posting untuk "memperbaiki" ini.
Martijn Pieters
23

Gunakan bagian skrip dalam tampilan dan tata letak utama.

Letakkan semua skrip Anda didefinisikan dalam tampilan Anda di dalam bagian Skrip tampilan. Dengan cara ini Anda dapat memiliki tata letak master memuat ini setelah semua skrip lain dimuat. Ini adalah pengaturan default ketika memulai proyek web MVC5 baru. Tidak yakin tentang versi sebelumnya.

Tampilan / Foo / MyView.cshtml:

// The rest of your view code above here.

@section Scripts 
{ 
    // Either render the bundle defined with same name in BundleConfig.cs...
    @Scripts.Render("~/bundles/myCustomBundle")

    // ...or hard code the HTML.
    <script src="URL-TO-CUSTOM-JS-FILE"></script>

    <script type="text/javascript">
      $(document).ready(function () {

        // Do your custom javascript for this view here. Will be run after 
        // loading all the other scripts.            
      });
    </script>
}

Tampilan / Dibagi / _Layout.cshtml

<html>
<body>
    <!-- ... Rest of your layout file here ... -->

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

Perhatikan bagaimana bagian skrip ditampilkan terakhir dalam file tata letak master.

angularsen
sumber
2
Catatan: Bagian tampilan tidak didukung dalam tampilan sebagian oleh desain.
Adam Naylor
Inilah yang harus saya lakukan untuk memperbaiki saya .... dan saya seharusnya tahu lebih baik untuk menggunakan @Skrips di tempat pertama tetapi lupa tentang hal itu sampai saya mencari perbaikan.
Caverman
12

pastikan Anda benar-benar memuat jquery ini bukan jquery - ini ui!

  <script language="JavaScript" 
    src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js">
  </script>

Ini adalah sumber skrip yang tepat untuk jquery:

 <script language="JavaScript"  src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
Wolfgang Fahl
sumber
11

Seperti yang dinyatakan di atas, itu terjadi karena konflik $ variabel.

Saya menyelesaikan masalah ini dengan memesan variabel sekunder untuk jQuery tanpa konflik.

var $j = jQuery.noConflict();

dan kemudian menggunakannya di mana saja

$j( "div" ).hide();

lebih detail dapat ditemukan di sini

Naveed Abbas
sumber
8

Ini berarti bahwa pustaka jQuery Anda belum dimuat.

Anda dapat memindahkan kode setelah menarik pustaka jQuery.

atau Anda dapat menggunakan sesuatu seperti ini

window.onload = function(){
  // Your code here
};  
Nesar
sumber
Ini menyala setelah DOM dimuat, tetapi tidak ketika kontrol, javascript dan program lain yang berjalan di latar belakang telah dimuat. Penundaan waktu perlu digunakan agar ini berfungsi.
Fandango68
5

setelah beberapa tes saya menemukan solusi cepat, Anda dapat menambahkan di atas halaman indeks Anda:

<script>
$=jQuery;
</script>

itu bekerja dengan sangat baik :)

Mimouni
sumber
4
pertanyaannya adalah: $ tidak didefinisikan, bukan?
Mimouni
ReferenceError Uncaught: jQuery tidak didefinisikan
Simon Schnell
Apakah Anda meletakkannya tepat di bawah impor pustaka jQuery?
Mike Warren
4

Saya mendapat pesan kesalahan yang sama ketika saya salah mengeja referensi jQuery dan bukannya type="text/javascript"saya mengetik "... javascirpt". ;)

alan
sumber
Eureka! Saya punya milik saya sebagai type="text/css". Terima kasih telah menyelamatkan kewarasan saya!
Jeriko
Saya melakukan kesalahan dan telah type="javascript". Terbuang 30 menit menemukannya.
mason
4

Kedengarannya seperti jQuery tidak memuat dengan benar. Sumber / versi apa yang Anda gunakan?

Atau, itu bisa berupa tabrakan namespace, jadi coba gunakan jQuery secara eksplisit daripada menggunakan $. Jika berhasil, Anda mungkin ingin menggunakan noConflictuntuk memastikan kode lain yang digunakan $tidak rusak.

Alexender Dumma
sumber
3

Kesalahan itu berarti bahwa jQuery belum dimuat di halaman. Menggunakan $(document).ready(...)atau varian apa pun tidak akan ada gunanya, seperti $fungsi jQuery.

Penggunaan window.onloadharus bekerja di sini. Perhatikan bahwa hanya satu fungsi yang dapat ditetapkan window.onload. Untuk menghindari kehilangan logika muatan asli, Anda dapat menghias fungsi aslinya seperti:

originalOnload = window.onload;
window.onload = function() {
  if (originalOnload) {
    originalOnload();
  }
  // YOUR JQUERY
};

Ini akan menjalankan fungsi yang semula ditugaskan window.onload, dan kemudian akan mengeksekusi // YOUR JQUERY.

Lihat https://en.wikipedia.org/wiki/Decorator_pattern untuk detail lebih lanjut tentang pola dekorator.

Kyle McVay
sumber
2

Saya menggunakan Url.Content dan tidak pernah memiliki masalah.

<script src="<%= Url.Content ("~/Scripts/jquery-1.4.1.min.js") %>" type="text/javascript"></script>
mdm20
sumber
2

Dalam solusinya disebutkan - "Satu hal terakhir untuk memeriksa adalah memastikan bahwa Anda tidak memuat plugin apa pun sebelum Anda memuat jQuery. Plugin memperpanjang objek" $ ", jadi jika Anda memuat plugin sebelum memuat inti jQuery, maka Anda akan mendapatkan kesalahan yang Anda jelaskan. "

Untuk menghindari ini -

Banyak pustaka JavaScript menggunakan $ sebagai fungsi atau nama variabel, seperti halnya jQuery. Dalam kasus jQuery, $ hanyalah alias untuk jQuery, jadi semua fungsionalitas tersedia tanpa menggunakan $. Jika kita perlu menggunakan pustaka JavaScript lain bersama jQuery, kita dapat mengembalikan kontrol $ kembali ke pustaka lain dengan panggilan ke $ .noConflict ():


sumber
1

Saya pernah mengalami masalah ini tanpa alasan yang jelas. Itu terjadi secara lokal ketika saya menjalankan melalui server pengembangan aspnet. Itu telah bekerja dan saya mengembalikan semuanya ke keadaan di mana sebelumnya telah bekerja dan tetap tidak berhasil. Saya mencari di chrome debugger dan jquery-1.7.1.min.js telah dimuat tanpa masalah. Itu semua sangat membingungkan. Saya masih tidak tahu apa masalahnya selain menutup browser, menutup server pengembangan dan kemudian mencoba lagi mengatasinya.

cedd
sumber
1

Cukup tempatkan url jquery di bagian atas kode jquery Anda

seperti ini--

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>
vikrantx
sumber
1

Saya memiliki masalah yang sama dan itu karena referensi saya ke jQuery.js tidak ada dalam tag. Begitu saya beralih itu, semuanya mulai bekerja.

Anthony

Anthony
sumber
1
  1. Periksa jalur yang tepat dari file jquery Anda disertakan.

    <script src="assets/plugins/jquery/jquery.min.js"></script>

jika Anda menambahkan ini di bagian bawah halaman Anda, mohon semua panggil fungsi JS di bawah deklarasi ini.

  1. Periksa menggunakan tes kode ini,

    <script type="text/javascript">
    /***
     * Created by dadenew
     * Submit email subscription using ajax
     * Send email address
     * Send controller
     * Recive response
     */
    $(document).ready(function() { //you can replace $ with Jquery
    
      alert( 'jquery working~!' );
    });

Perdamaian!

Daniel Adenew
sumber
0

Kami memiliki masalah yang sama .... tetapi tidak sengaja saya memeriksa properti folder dan mengatur sesuatu ...

Anda harus memeriksa properti masing-masing folder yang Anda akses ..

  1. folder klik kanan
  2. tab 'izin'
  3. atur akses folder: PEMILIK: buat dan hapus file GROUP: akses file LAINNYA: akses file

Saya harap ini solusinya ......

RoyS_philippines
sumber
0

Saat menggunakan jQuery di asp.net, jika Anda menggunakan halaman master dan Anda memuat file sumber jquery di sana, pastikan Anda memiliki header contentplaceholder setelah semua referensi skrip jquery.

Saya punya masalah di mana halaman mana pun yang menggunakan halaman master akan mengembalikan '$ tidak didefinisikan' hanya karena urutan yang salah membuat kode sisi klien dijalankan sebelum objek jquery dibuat. Jadi, pastikan Anda memiliki:

<head runat="server">
    <script type="text/javascript" src="Scripts/jquery-VERSION#.js"></script>
    <asp:ContentPlaceHolder id="Header" runat="server"></asp:ContentPlaceHolder>
</head>

Dengan begitu kode akan berjalan secara berurutan dan Anda akan dapat menjalankan kode jQuery di halaman anak.

Francis Musignac
sumber
0

Dalam kasus saya, saya menunjuk JQuery yang dihosting Google. Itu dimasukkan dengan benar, tetapi saya berada di halaman HTTPS dan memanggilnya melalui HTTP. Setelah saya memperbaiki masalah (atau memperbolehkan konten yang tidak aman), masalah tersebut langsung muncul.

Anthony
sumber
0

Saya mengalami masalah yang sama dan tidak tahu apa penyebabnya. Baru-baru ini saya mengonversi file HTML saya dari Jepang ke UTF-8, tetapi saya tidak melakukan apa pun dengan file skrip. Entah bagaimana jquery-1.10.2.min.js menjadi rusak dalam proses ini (saya masih tidak tahu bagaimana). Mengganti jquery-1.10.2.min.js dengan yang asli memperbaikinya.

Gavin
sumber
0

tampaknya jika Anda menemukan file jquery.js Anda di bawah folder yang sama atau di beberapa subfolder di mana file html Anda berada, masalah Firebug diselesaikan. misalnya jika html Anda berada di bawah C: / folder1 /, maka file js Anda harus berada di suatu tempat di bawah C: / folder1 / (atau C: / folder1 / folder2 dll) juga dan ditangani sesuai dalam dokumen html. semoga ini membantu.

sc123
sumber
0

Saya memiliki masalah yang sama dan tidak ada kasus yang menyelesaikan masalah saya. Satu-satunya hal yang berfungsi untuk saya, diletakkan di file Site.master, yang berikutnya:

<script src="<%= ResolveUrl("~/Scripts/jquery-1.7.1.min.js") %>" type="text/javascript"></script>
<script src="<%= ResolveUrl("~/Scripts/bootstrap/js/bootstrap.min.js") %>" type="text/javascript"></script>

Dengan src = "<% = ResolveUrl (" ") ... beban jQuery di Halaman Konten sudah benar.

amelia
sumber
0

Saya memiliki masalah yang sangat mirip. Dalam aplikasi C # MVC saya, JQuery tidak dikenali. Saya perlu memindahkan @ Scripts.Render ("~ / bundles / jquery") dari bagian bawah file _Layout.cshtml saya ke kepala bagian. Juga pastikan Anda telah mengambil Jquery sebagai paket Nuget jika Anda menggunakan visual studio!

<head>
    @Scripts.Render("~/bundles/jquery")
</head>
BHOW
sumber
0

Ada cara untuk membuatnya secara otomatis memuat javascript sebelum sisa kode berjalan.

Pergilah ke Views \ Shared_Layout.html dan tambahkan yang berikut ini

<head>
  <*@ Omitted code*@>
  <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</head>
Menepuk
sumber
0

jika scripttag memiliki deferatribut itu menunjukkan kesalahan

ReferenceError Uncaught: $ tidak didefinisikan

dan harus menghapus atribut deferdari scripttag

AbdulAhmad Matin
sumber
0

Ini adalah masalah umum untuk menyelesaikan ini, Anda harus memeriksa beberapa poin

  1. Sertakan Perpustakaan Main Jquery
  2. Periksa Masalah Lintas-Peramban
  3. Tambahkan Perpustakaan pada TOP dari kode jquery
  4. Periksa CDN mungkin diblokir.

Rincian lengkap diberikan di blog ini, klik di sini

Anju Batta
sumber