Saya sedang membangun halaman web biasa yang mengharuskan saya memuat sekitar lima file CSS dan sepuluh file Javascript.
- Saat memuatnya secara terpisah di halaman HTML, halaman web saya memuat dengan baik.
Sekarang untuk produksi, saya menggabungkan semua Javascript menjadi satu file, dalam urutan yang diperlukan, dan semua CSS ke file lain. Tetapi ketika saya mencoba menjalankan halaman web dengan file yang digabungkan, itu membuat kesalahan yang mengatakan:
Uncaught TypeError: undefined is not a function
Di baris tempat jquery.min.js dimuat di file Javascript yang digabungkan.
Apa yang dapat saya lakukan untuk mengurangi ini? Saya ingin menggabungkan semua file dan mengecilkannya untuk produksi. Tolong bantu.
EDIT: Saya menggabungkan Javascript dan CSS dalam urutan saat mereka dimuat secara individual dan berfungsi dengan baik.
sumber
undefined
jika Anda tidak punya kode untuk ditampilkan?Jawaban:
Dengan asumsi masalah ini masih belum terselesaikan, banyak file individual tidak mengakhiri kode mereka dengan titik koma. Kebanyakan skrip jQuery diakhiri dengan
(jQuery)
dan Anda harus memilikinya(jQuery);
.Sebagai file terpisah, skrip akan dimuat dengan baik tetapi sebagai satu file individual Anda memerlukan titik koma.
sumber
Anda mungkin harus memeriksa ulang urutan penggabungan file, seperti ini:
sumber
Solusi ini berhasil untuk saya
Pindahkan kode Anda di dalam closure dan gunakan $ sebagai ganti jQuery
Saya menemukan solusi di atas di /magento/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma
setelah melakukan terlalu banyak
sumber
Saya mendapat kesalahan yang sama karena memiliki dua referensi ke versi jQuery yang berbeda.
Di halaman master saya:
Dan juga di halaman:
sumber
Saya mengalami masalah ini baru-baru ini dengan plug-in jQuery Validation , menggunakan Squishit , juga mendapatkan kesalahan js:
Saya memperbaikinya dengan mengubah referensi ke file jquery.validate.js yang tidak diminimalkan, daripada jquery.validate.min.js.
Saya pikir versi minified dari file tertentu, ketika dikompresi lebih lanjut menggunakan Squishit, misalnya, mungkin dalam beberapa kasus tidak berurusan dengan titik koma yang hilang dan sejenisnya, seperti yang disarankan @Dustin, jadi Anda mungkin harus bereksperimen dengan file mana yang Anda bisa kompres dua kali, dan yang Anda serahkan saja ke Squishit atau apa pun yang Anda bundelkan.
sumber
Bagi mereka di luar sana yang masih tidak bisa memperbaiki ini, saya melakukannya dengan mengubah 'ini' saya menjadi '$ (ini)' saat menggunakan jQuery.
MISALNYA:
Tetap:
sumber
Saya mengalami masalah yang sama, ketika salah menamai variabel dengan nama yang sama, sebagai fungsi.
Jadi ini:
gagal, menghasilkan pesan kesalahan yang disebutkan OP.
Perbaiki ini sesederhana mengubah baris di atas menjadi:
Saya tidak tahu, seberapa membantu dalam situasi ini, tetapi saya memutuskan untuk memberikan jawaban ini untuk orang lain yang mencari solusi untuk masalah serupa.
sumber
Ya, saya juga memperbaikinya mengubah di perpustakaan js menjadi yang tidak diminimalkan.
Misalnya, di tag, ubah:
Untuk:
Menghentikan 'min' sebagai tidak diminimalkan.
Terima kasih untuk idenya.
sumber
Ingat: Fungsi Javascript bersifat CASE SENSITIVE.
Saya memiliki kasus di mana saya cukup yakin bahwa kode saya akan berjalan dengan lancar. Tapi tetap saja, ada kesalahan dan saya memeriksa konsol Javascript Google Chrome untuk memeriksa apa itu.
Baris kesalahan saya adalah
Dan mendapat pesan kesalahan yang sama:
Sepertinya tidak ada yang salah dengan kode di atas tetapi tidak berjalan. Saya memecahkan masalah selama hampir satu jam dan kemudian membandingkannya dengan kode saya yang sedang berjalan. Kesalahan saya adalah bahwa itu telah diatur ke
SetAttribute
, yang seharusnyasetAttribute
.sumber
Seandainya ada orang bodoh di luar sana seperti saya, saya mengalami masalah yang membuat frustrasi ini karena saya lupa yang sederhana
new
kata kunci sebelum membuat instance objek baru.
sumber
Saya baru saja mendapat pesan yang sama dengan kode berikut (di IcedCoffeeScript):
Bagi saya ini seperti kode ICS biasa. Saya membuka konstruksi await-defer ke CoffeeScript biasa:
Apa yang benar-benar terjadi adalah bahwa saya mencoba melewatkan 1 fungsi panggilan balik (dengan 2 parameter) untuk berfungsi
f
mengharapkan dua parameter, secara efektif tidak diaturcb
di dalamf
, yang dilaporkan oleh kompilator dengan benar sebagaiundefined is not a function
.Kesalahan terjadi karena saya secara membabi buta menempelkan kode boilerplate gaya panggilan balik.
f
tidak memerlukanerr
parameter yang dilewatkan ke dalamnya, jadi seharusnya:Dalam kasus umum, saya akan merekomendasikan untuk memeriksa ulang tanda tangan fungsi dan pemanggilan untuk mencocokkan arities. Tumpukan panggilan dalam pesan kesalahan harus dapat memberikan petunjuk yang berguna.
Dalam kasus khusus Anda, saya sarankan untuk mencari definisi fungsi yang muncul dua kali dalam file gabungan, dengan tanda tangan berbeda, atau tugas ke variabel global yang memegang fungsi.
sumber
Pastikan Anda telah mengomentari setiap komentar. Terkadang saat menyalin dan menempel, Anda tidak akan melihat "/ *!"
Juga ketika Anda masuk ke konsol, mereka akan mencantumkan kesalahan Anda dan Anda harus mengambilnya satu per satu. Jika Anda melihat "SyntaxError Tidak Tertangkap: Token tak terduga *" Itu mungkin berarti ia sedang membaca file js Anda dan tidak melewati baris pertama.
/ *! * jquery.tools 1.1.2 - Pustaka UI yang hilang untuk Web * * [tools.tabs-1.0.4, tools.tooltip-1.1.2, tools.scrollable-1.1.2, tools.overlay-1.1.2, tools.expose-1.0.5] * * Hak Cipta (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * File dibuat: Rabu 07 Okt 09:40:16 GMT 2009 * /
sumber
Saya mendapatkan ini ketika saya secara tidak sengaja melewatkan terlalu banyak parameter ke dalam fungsi jquery yang hanya mengharapkan satu parameter callback.
Untuk pemecahan masalah lainnya: pastikan Anda memeriksa semua panggilan fungsi jquery Anda untuk parameter tambahan.
sumber