Uncaught TypeError: undefined не является функцией при загрузке jquery-min.js
Я создаю обычную веб-страницу, которая требует, чтобы я загружал около пяти файлов CSS и десять файлов Javascript.
- При загрузке их отдельно на странице HTML моя веб-страница загружается штрафом.
-
Теперь для создания я объединил весь Javascript в один файл в нужном порядке и весь CSS в другой файл. Но когда я пытаюсь запустить веб-страницу с конкатенированными файлами, она выдает сообщение об ошибке:
Uncaught TypeError: undefined is not a function
В строке, где jquery.min.js загружается в файл конкатенированного Javascript.
Что я могу сделать, чтобы уменьшить это? Я хочу объединить все файлы и минимизировать их для производства. Пожалуйста, помогите.
EDIT: Я объединил Javascript и CSS в том порядке, в котором они были, когда они загружались индивидуально и работали нормально.
Ответы
Ответ 1
Предполагая, что эта проблема еще не решена, многие отдельные файлы не заканчивают свой код точкой с запятой. Большинство сценариев jQuery заканчиваются на (jQuery)
, и вам нужно иметь (jQuery);
.
В качестве отдельных файлов script будет загружаться просто отлично, но в качестве одного отдельного файла вам нужны точки с запятой.
Ответ 2
Возможно, вам придется повторно проверить порядок, в котором вы объединяете файлы,
это должно быть что-то вроде:
- jquery.min.js
- JQuery-ui.js
- любые сторонние плагины, которые вы загружаете.
- ваш пользовательский JS
Ответ 3
Я получил ту же ошибку из двух ссылок на разные версии 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>
Ответ 4
Это решение сработало для меня
;(function($){
// your code
})(jQuery);
Переместите свой код внутри закрытия и используйте $вместо jQuery
Я нашел указанное решение в https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma
после слишком большой загрузки
Ответ 5
У меня была эта проблема недавно с плагином jQuery Validation, используя Squishit, также получение ошибки js:
"undefined не является функцией"
Я исправил его, изменив ссылку на файл 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 или тому, что вы связываете с.
Ответ 6
Для тех, кто еще не смог исправить это, я сделал это, изменив 'this' на '$ (this)' при использовании jQuery.
например:
$('.icon').click(function() {
this.fadeOut();
});
Fixed
$('.icon').click(function() {
$(this).fadeOut();
});
Ответ 7
Я столкнулся с той же проблемой, когда ошибочно назвал переменную с тем же именем, что и функция.
Итак, это:
isLive = isLive(data);
не удалось, вызвав сообщение об ошибке, указанное в OP.
Исправить это было так же просто, как изменить следующую строку:
isItALive = isLive(data);
Я не знаю, насколько это помогает в этой ситуации, но я решил поместить этот ответ для других, ищущих решение для подобных проблем.
Ответ 8
Да, я также исправил его изменение в js-библиотеках на unminified.
Например, в теге измените:
<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>
Завершение "min" как unminified.
Спасибо за идею.
Ответ 9
Помните: функции Javascript CASE SENSITIVE.
У меня был случай, когда я уверен, что мой код будет работать плавно. Но все же, получил ошибку, и я проверил консоль Javascript в Google Chrome, чтобы проверить, что это такое.
Моя строка ошибок
opt.SetAttribute("value",values[a]);
И получил то же сообщение об ошибке:
Uncaught TypeError: undefined is not a function
Ничего не похоже на код выше, но он не работает. Я устраняю проблему почти час, а затем сравниваю ее с другим кодом. Моя ошибка в том, что она была установлена на SetAttribute
, которая должна быть SetAttribute
.
Ответ 10
У меня просто было то же сообщение со следующим кодом (в 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
В общем случае я бы рекомендовал дважды проверить сигнатуры функций и вызовы для сопоставления arities. Столбец вызова в сообщении об ошибке должен содержать полезные подсказки.
В вашем специальном случае я рекомендую искать определения функций, появляющиеся дважды в объединенном файле, с разными сигнатурами или назначениями глобальных переменных, удерживающих функции.
Ответ 11
Убедитесь, что вы комментировали любые комментарии. Иногда при копировании и вставке вы не учитываете "/*!".
Также, когда вы заходите в консоль, они перечисляют ваши ошибки, и вы должны брать их по одному. Если вы видите "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]
*
* Copyright (c) 2009 Tero Piirainen
* http://flowplayer.org/tools/
* Сгенерировано: Wed Oct 07 09:40:16 GMT 2009
*/
Ответ 12
Если есть какие-то дебилы, такие как я, у меня была эта неприятная проблема, потому что я забыл простую
new
перед созданием нового объекта.
Ответ 13
Я получил это, когда случайно передал слишком много параметров в функцию jquery, которая ожидала только один параметр обратного вызова.
Другие способы устранения неполадок: убедитесь, что вы проверяете все вызовы функций jquery для дополнительных параметров.