it-swarm.com.ru

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 в том порядке, в котором они были при загрузке по отдельности и работали нормально.

103
ghostCoder

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

Как отдельные файлы скрипт будет загружаться просто отлично, но как один отдельный файл вам нужны точки с запятой.

175
Dustin

Возможно, вам придется еще раз проверить порядок, в котором вы объединяете файлы, это должно быть что-то вроде:

  1. jquery.min.js
  2. jQuery-ui.js
  3. любые сторонние плагины, которые вы загружаете
  4. ваш пользовательский JS
27
Bilal Murtaza

Это решение сработало для меня

 
; (функция ($) {
 // ваш код 
}) (jQuery); 
 

Переместите свой код в замыкание и используйте $ вместо jQuery

Я нашел указанное выше решение в https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in- ма

после того, как слишком много

17
Bikram Shrestha

Я получил ту же ошибку из-за двух ссылок на разные версии 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>
15
scw

У меня недавно была эта проблема с плагин 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
Ralph Lavelle

Для тех, кто до сих пор не может исправить это, я сделал это, изменив "this" на "$ (this)" при использовании jQuery.

НАПРИМЕР:

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

Исправлена:

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

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

Итак, это:

isLive = isLive(data);

не удалось, генерируется упомянутое сообщение об ошибке OP.

Исправить это было так же просто, как изменить вышеприведенную строку на:

isItALive = isLive(data);

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

4
trejder

Да, я также исправил изменение в библиотеках 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>

Выход из "мин" как неунифицированный.

Спасибо за идею.

4
Francisco Alonso

Помните: функции Javascript чувствительны к регистру.

У меня был случай, когда я почти уверен, что мой код будет работать гладко. Но все же, получил ошибку, и я проверил консоль Javascript Google Chrome, чтобы проверить, что это такое.

Моя строка ошибки

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

И получил то же сообщение об ошибке:

Uncaught TypeError: undefined is not a function

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

2
Logan Wayne

В случае, если есть какие-то дебилы, как я, у меня была эта неприятная проблема, потому что я забыл простое

new

ключевое слово перед созданием нового объекта.

1
CodyBugstein

Убедитесь, что вы прокомментировали любые комментарии. Иногда при копировании и вставке вы пропускаете "/ *!"

Также, когда вы заходите в консоль, они перечисляют ваши ошибки, и вы должны принимать их по одной. Если вы видите "Uncaught SyntaxError: Unexpected token *", это может означать, что он читает ваш 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 * /

1
Tasha

У меня только что было то же сообщение со следующим кодом (в IcedCoffeeScript):

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

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

Мне показалось, что это обычный ICS код. Я развернул конструкцию await-defer для обычного CoffeeScript:

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

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

Ошибка произошла потому, что я слепо вставил шаблонный код в стиле обратного вызова. f не нуждается в передаваемом в него параметре err, поэтому просто должно быть:

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

В общем случае я бы рекомендовал перепроверить сигнатуры функций и вызовы на соответствие арентности. Стек вызовов в сообщении об ошибке должен содержать полезные советы.

В вашем особом случае я рекомендую искать определения функций, появляющиеся дважды в объединенном файле, с разными сигнатурами или назначениями глобальных переменных, содержащих функции.

1
Jens Jensen

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

Для устранения других проблем: убедитесь, что вы проверили все вызовы функций jquery на наличие дополнительных параметров.

0
JSideris