Вопрос по jquery, javascript – Uncaught TypeError: undefined не является функцией при загрузке jquery-min.js

103

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

When loading them separately in the HTML page, my webpage loads fine.

Now for production, I concatenated all the Javascript into a single file, in the order needed, and all the CSS into another file. But when I try to run the web page with the concatenated files it throws an error saying:

Uncaught TypeError: undefined is not a function

На строке, где jquery.min.js загружается в объединенном файле Javascript.

Что я могу сделать, чтобы смягчить это? Я хочу объединить все файлы и минимизировать их для производства. Пожалуйста помоги.


EDIT: Я объединил Javascript и CSS в том порядке, в котором они были загружены по отдельности и работали нормально.

принять высокопоставленный ответ может быть? Allisone
как мы можем знать чтоundefined если у вас нет кода, чтобы показать? Joseph
undefined идет в jquery-1.6.1.min.js, который я загружаю. может быть jquery не загружается должным образом или что-то? ghostCoder

Ваш Ответ

13   ответов
26

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

jquery.min.js jquery-ui.js any third party plugins you loading your custom JS
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded ghostCoder
0

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

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

1

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

new

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

16

    ;(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

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

15

На моей главной странице:

<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>
175

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
2
Remember: Javascript functions are CASE SENSITIVE.

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

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

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

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

Uncaught TypeError: undefined is not a function

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

1

eScript):

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

что вы прокомментировали любые комментарии. Иногда при копировании и вставке вы пропускаете & quot; / *! & Quot;

Также, когда вы заходите в консоль, они перечисляют ваши ошибки, и вы должны принимать их по одной. Если вы видите & quot; Uncaught SyntaxError: Неожиданный токен * & quot; Это может означать, что он читает ваш файл js и не проходит первую строку.

/*! * jquery.tools 1.1.2 - The missing UI library for the 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] * * Copyright (c) 2009 Tero Piirainen * http://flowplayer.org/tools/ * File generated: Wed Oct 07 09:40:16 GMT 2009 */

4

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

Итак, это:

isLive = isLive(data);

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

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

isItALive = isLive(data);

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

4

Например, в теге измените:

<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' как не унифицированный.

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

6

Плагин проверки jQuery, с помощьюSquishit, также получая ошибку js:

"undefined is not a function"

Я исправил это, изменив ссылку на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 или тому, с чем вы связываете.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

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

НАПРИМЕР:

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

Исправлена:

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

Похожие вопросы