Uncaught TypeError: undefined не є функцією для завантаження jquery-min.js


104

Я будую звичайну веб-сторінку, яка вимагає завантаження приблизно п'яти CSS-файлів і десяти файлів Javascript.

  • Коли ви завантажуєте їх окремо на сторінку HTML, моя веб-сторінка завантажується чудово.
  • Тепер для виробництва я об'єднав увесь Javascript в один файл, в необхідному порядку, а всі CSS в інший файл. Але коли я намагаюся запустити веб-сторінку з об'єднаними файлами, вона видає помилку:

    Uncaught TypeError: undefined is not a function

У рядку, де jquery.min.js завантажується в з'єднаний файл Javascript.

Що я можу зробити, щоб пом’якшити це? Я хочу об'єднати всі файли і мінімізувати їх для виробництва. Будь ласка, допоможіть.


EDIT: Я об'єднав Javascript та CSS у тому порядку, який вони були, коли вони завантажувались окремо і працювали нормально.


5
як ми можемо знати, що робити, undefinedякщо у вас немає коду для показу?
Йосип

undefined надходить у jquery-1.6.1.min.js, який завантажується. можливо, jquery не завантажується належним чином чи щось?
ghostCoder

Ви можете прийняти відповідь високого рейтингу?
Allisone

Відповіді:


179

Якщо припустити, що цю проблему все ще не вирішено, багато окремих файлів не закінчують код комою. Більшість сценаріїв jQuery закінчуються (jQuery)і потрібно мати (jQuery);.

Як окремі файли сценарій завантажуватиметься чудово, але як один окремий файл вам потрібні крапки з комою.


18
+1. Під час об'єднання коду JavaScript ви завжди повинні приєднуватися до них з комою. Занадто багато з них все ще дійсні, хоча менше призводять до помилок.
Бергі

9
Це неймовірно складно налагоджувати. Дякую за дійсно ефективну відповідь!
ghayes

5
Очевидно, один з таких прикладів Bootstrap's js. Дякую за це! Це була справжня локшина локшини.
Кевін Біл

Я намагаюся імпортувати API iframe youtube, і він не закінчується крапкою з комою, і я отримую цю помилку. Я не зв'язую це ні з чим ... Я завантажую його в jQuery.getScript (). Отже ... Чи може це спричинити мою помилку? Або це не має сенсу?
Даніель

1
Як вирішити цю проблему, якщо ми побачимо цю помилку під час роботи з бібліотекою? Я намагаюся використовувати 2.3.2 / js / bootstrap.min.js та /1.4.6/bootstrap-editable/js/bootstrap-editable.min.js
codeObserver

28

Можливо, вам доведеться повторно перевірити порядок злиття файлів, це має бути щось на кшталт:

  1. jquery.min.js
  2. jquery-ui.js
  3. будь-які додатки, які ви завантажуєте
  4. ваш власний JS

це як json2.js, jquery-1.6.1.min.js, плагіни jquery, мій код. її в цьому порядку.
ghostCoder

якщо json2.js використовує будь-яку функцію jquery, то jquery.min.js повинен бути першим. я б запропонував. jquery.min.js, jqueryPlugins, json2.js, мій код.
Білал Муртаза


16

Я отримав ту саму помилку, що мав дві посилання на різні версії jQuery.

На моїй головній сторінці:

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

А також на сторінці:

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

7

У мене ця проблема була нещодавно з плагіном jQuery Validation , використовуючи Squishit , також отримувала помилку js:

"невизначений - це не функція"

Я встановив її, змінивши посилання на unminified файл jquery.validate.js, а не jquery.validate.min.js.

@MvcHtmlString.Create(
    @SquishIt.Framework.Bundle.JavaScript()
        .Add("~/Scripts/Libraries/jquery-1.8.2.min.js")
        .Add("~/Scripts/Libraries/jquery-ui-1.9.1.custom.min.js")
        .Add("~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js")
        .Add("~/Scripts/Libraries/jquery.validate.js")
        .Add("~/Scripts/Libraries/jquery.validate.unobtrusive.js")
         ... more files

Я думаю, що мінімізована версія певних файлів при подальшому стисненні за допомогою Squishit, наприклад, в деяких випадках може не мати справу з відсутніми напівколонами тощо, як пропонує @Dustin, тому вам, можливо, доведеться експериментувати, з якими файлами ви можете подвійний компрес, який ви просто залишаєте Squishit або тому, що ви купуєте.


Використання незміненої версії був для мене лише квитком - дякую.
Пол Дін

Для мене причиною проблеми став файл json2.min.js з версії 1.0.2 пакета NuGet. Я переключив його на нехвилинний файл, і комбінований файл Squishit працює нормально.
billoreid

6

Для тих, хто все ще не вдається виправити це, я зробив це, змінивши своє "це" на "$ (це)" під час використання jQuery.

EG:

$('.icon').click(function() {
    this.fadeOut();
});

Виправлено:

$('.icon').click(function() {
    $(this).fadeOut();
});

5

Я зіткнувся з тією самою проблемою, коли помилково назвали змінну з тим самим іменем, як функцію.

Отже це:

isLive = isLive(data);

не вдалося, генеруючи згадане повідомлення про помилку ОП.

Виправити це було так само просто, як змінити вище рядка на:

isItALive = isLive(data);

Я не знаю, наскільки це допомагає в цій ситуації, але я вирішив поставити цю відповідь для інших, хто шукає рішення для подібних проблем.


5

Так, я також зафіксував це, змінивши в js-бібліотеках на невідомі.

Наприклад, у тезі змініть:

<script type="text/javascript" src="js/jquery.ui.core.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.min.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.min.js"></script>

Для:

<script type="text/javascript" src="js/jquery.ui.core.js"></script>
<script type="text/javascript" src="js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="js/jquery.ui.rcarousel.js"></script>

Вихід із "хв" як незмінний.

Дякую за ідею.


3

Пам'ятайте: Функції Javascript - ЧАС СЛУЧАЛЬНИЙ.

У мене був випадок, коли я майже впевнений, що мій код буде працювати безперебійно. Але все ж сталася помилка, і я перевірив консоль Javascript Google Chrome, щоб перевірити, що це таке.

Мій рядок помилки такий

opt.SetAttribute("value",values[a]);

І отримали те саме повідомлення про помилку:

Uncaught TypeError: undefined is not a function

З кодом вище нічого не здається, але він не працює. Я виправляю проблеми майже годину, а потім порівнюю це з моїм іншим запущеним кодом. Моя помилка в тому, що це було встановлено SetAttribute, що має бути setAttribute.


2

У випадку, якщо є такі дебіли, як я, у мене була ця неприємна проблема, тому що я забув просте

new

ключове слово перед тим, як створити новий об'єкт.


1

У мене було те саме повідомлення із таким кодом (у IcedCoffeeScript):

f = (err,cb) ->
  cb null, true

await f defer err, res
console.log err if err  

Мені це здалося звичайним кодом ICS. Я розгорнув конструкцію очікування-відстрочки до звичайного CoffeeScript:

f (err,res) ->
  console.log err if err

Насправді це було те, що я намагався передати 1 функцію зворотного виклику (з двома параметрами) для роботи, fочікуючи два параметри, фактично не встановлюючи cbвсередині f, про що компілятор правильно повідомив undefined is not a function.

Помилка трапилась через те, що я сліпо вставив код коробки у стилі зворотного дзвінка. fне потрібен errпараметр, переданий в нього, таким чином повинен бути просто:

f = (cb) ->
  cb null, true
f (err,res) ->
  console.log err if err

У загальному випадку я рекомендую повторно перевірити підписи функцій та виклики на відповідність артій. Стек викликів у повідомленні про помилку повинен бути в змозі надати корисні підказки.

У вашому спеціальному випадку я рекомендую шукати визначення функцій, що з’являються двічі у об'єднаному файлі, з різними підписами або призначеннями глобальних змінних функцій, що містять.


1

Переконайтеся, що ви прокоментували будь-які коментарі. Іноді під час копіювання та вставлення ви залишатимете "/ *!"

Крім того, коли ви заходите в консоль, вони перелічать ваші помилки, і ви повинні приймати їх по черзі. Якщо ви бачите "Uncaught SyntaxError: Несподіваний маркер *", це може означати, що він читає ваш js-файл, і він не проходить перший рядок.

/ *! * jquery.tools 1.1.2 - відсутня бібліотека інтерфейсу користувача для Інтернету * * [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] * * Авторські права (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * Файл створено: ср. 07 жовтня 09:40:16 GMT 2009 * /


0

Це я отримав, коли випадково передав занадто багато параметрів у функцію jquery, яка очікувала лише одного параметра зворотного виклику.

Для усунення несправностей: переконайтеся, що ви перевіряєте всі виклики функції jquery на додаткові параметри.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.