TypeError: 'undefined' не является функцией (оценка '$ (document)')


139
  1. Я использую сайт WordPress.
  2. Включаю этот скрипт в шапку.

Когда скрипт загружается, я получаю такую ​​ошибку:

TypeError: 'undefined' не является функцией (оценка '$ (document)')

Я понятия не имею, что вызывает это и что это вообще означает.

В firebug я получаю следующее:

$ не является функцией


4
Убедитесь, что вы включили библиотеку jQuery перед своим пользовательским скриптом и что на Netвкладке Firebug нет ошибок (убедитесь, что jQuery действительно загружается).
wsanville

... да, конечно, jQuery загружается заранее. Я почти уверен, что это проблема с WordPress.
dcolumbus

Ответы:


239

Wordpress по умолчанию использует jQuery в режиме noConflict . Вам нужно ссылаться на него, используя jQueryимя переменной, а не $, например, используйте

jQuery(document);

вместо того

$(document);

Вы можете легко обернуть это в самоисполняющуюся функцию, $чтобы она снова ссылалась на jQuery (и также избегала загрязнения глобального пространства имен), например

(function ($) {
   $(document);
}(jQuery));

5
Скрипт не нужен; Вы можете просто позвонить, jQuery(document)а не $(document)куда хотите. Если вы действительно хотите использовать $вместо этого, то приведенный выше сценарий просто создает функцию, которая принимает аргумент, а $затем выполняет его, передавая jQuery; короче говоря, внутри функции $указывает на jQuery, как и следовало ожидать.
Эль Йобо

2
На самом деле то, что я сделал, это то, что я поместил свою нормальную вещь $(document).ready(function() { // code });вместо твоей $(document);... которая работала как чары.
dcolumbus 02

1
Да, это то, что я предлагал - «внутри функции $ указывает на jQuery, как и следовало ожидать».
Эль Йобо

Что ж, таким образом вы сэкономите пару символов :) Подробнее о форме! Function () {} () самовыполняющегося оператора .
Эль Йобо,

Я знаю, что это старый @ElYobo, но я думаю, вы могли бы отредактировать свой пост и добавить свой пример из вашего первого комментария в ответ в качестве второго примера. Спасибо, что сэкономили мне время =)
Manatax

27

Используйте jQuery noConflict. Это творило для меня чудеса

var example=jQuery.noConflict();
example(function(){
example('div#rift_connect').click(function(){
    example('span#resultado').text("Hello, dude!");
    });
});

То есть, если вы включили jQuery в свой HTML

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



11

У меня эта проблема была только в Chrome.

Я пробовал добавить

var $ =jQuery.noConflict();

непосредственно перед звонком

$(document).ready(function () {

Это сработало.

большое спасибо


Спасибо за это. Я знал, что могу решить эту проблему, используя «jQuery» вместо «$», но моя проблема заключалась в том, что при написании таким образом он блокировал редактирование Komodo, поэтому мне приходилось выбирать между получением подсказки / завершения кода на $ или фактической работой моего JavaScript. Этот метод позволил мне получить и то, и другое.
Джордж Кендрос

6

Также проверьте включение jQuery, за которым следуют некоторые компоненты / другие библиотеки (например, jQuery UI), а затем снова случайное включение jQuery - это переопределит jQuery и удалит помощники компонентов (например, .datepicker) из экземпляра.



4

Я бы использовал это

(function ($) {
   $(document);
}(jQuery));

2

Я также много раз сталкивался с такими проблемами в веб-разработке. На самом деле это не конфликт JS. Когда мы загружаем веб-сайт html в браузер, мы не сталкиваемся с такой ошибкой, но когда мы загружаем веб-сайт этого типа через localhost, мы сталкиваемся с такой проблемой. Это из-за localhost. Когда мы загружаем скрипты через localhost, он сканирует скрипт и выводит результат. Но когда мы не использовали localhost. Он просто сканирует вывод. Например, когда мы пишем PHP-код на стороне локального хоста и запускаем его без хоста, мы получаем ошибку. Но если код правильный и выполняется через хост, мы получаем фактический результат, а когда мы используем элемент inspect, мы получаем выходной код в формате HTMl, но не в формате PHP, это происходит из-за рендеринга кода.

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

jQuery(document).ready(function($){
/******** Body of Jquery Code*****/
});

Этот код регистрирует '$' как переменную функции, применяя jquery. В противном случае по умолчанию файл .js читается только как javascript.


1

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


1

Две вещи:

  1. Убедитесь, что вы добавили библиотеку jQuery перед вашим $ (document).
  2. Затем просто замените все «$» на: jQuery, как в предыдущих комментариях.

1

оберните весь скрипт между этим ...

<script>
    $.noConflict();
    jQuery( document ).ready(function( $ ) {
      // Code that uses jQuery's $ can follow here.
    });
</script>

Многие библиотеки JavaScript используют $ как имя функции или переменной, как это делает jQuery. В случае jQuery $ - это просто псевдоним для jQuery, поэтому все функции доступны без использования $. Если вам нужно использовать другую библиотеку JavaScript вместе с jQuery, верните управление $ back другой библиотеке с помощью вызова $ .noConflict () . Старые ссылки на $ сохраняются во время инициализации jQuery; noConflict () просто восстанавливает их.


1

Вы можете использовать как jQuery, так и $ в приведенном ниже фрагменте. это сработало для меня

jQuery( document ).ready(function( $ ) {
  // jQuery(document)
  // $(document)
});

1

Вы можете передать $ в функции ()

jQuery(document).ready(function($){

// jQuery code is in here

});

или вы можете заменить $(document);этимjQuery(document);

или вы можете использовать jQuery.noConflict()

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  jq('selector').show();
});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.