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

119
  • Я использую сайт WordPress.
  • Я включаю этот script в заголовок.

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

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

Я понятия не имею, что вызывает его или что оно даже означает.

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

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

  • 3
    Убедитесь, что вы включили библиотеку jQuery перед вашим пользовательским сценарием, и что на вкладке Net Firebug нет ошибок (убедитесь, что jQuery действительно загружается).
  • 0
    ... да, конечно, jQuery загружается заранее. Я уверен, что это проблема с WordPress Enque.
Теги:

14 ответов

238
Лучший ответ

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

jQuery(document);

вместо

$(document);

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

(function ($) {
   $(document);
}(jQuery));
  • 5
    Скрипт не нужен; Вы можете просто вызвать jQuery(document) вместо $(document) где вы хотите. Если вы хотите использовать вместо этого $ , то приведенный выше скрипт просто создает функцию, которая принимает аргумент $ затем выполняет его, передавая jQuery ; короче говоря, внутри функции $ указывает на jQuery, как и следовало ожидать.
  • 2
    На самом деле я поместил свой обычный $(document).ready(function() { // code }); вместо вашего $(document); ... это работает как шарм.
Показать ещё 6 комментариев
20

Использовать 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="/jquery.min.js"></script>
14

Используйте это:

var $ =jQuery.noConflict();
9

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

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

var $ =jQuery.noConflict();

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

$(document).ready(function () {

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

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

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

Попробуйте этот фрагмент:

jQuery(function($) {
  // Your code.
})

Это сработало для меня, возможно, это тоже поможет.

5

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

2

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

(function ($) {
   $(document);
}(jQuery));
  • 0
    пожалуйста используйте 4 пробела для кодовых блоков
2
 ;(function($){
        // your code
    })(jQuery);

Поместите свой код js внутри закрытия выше, он должен решить проблему.

0

Вы можете передать $in function()

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();
});
0

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

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

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

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

0

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

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

оберните все script между этим...

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

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

0

Две вещи:

  • Убедитесь, что вы добавили библиотеку jQuery перед вашим $(документом).
  • Затем просто измените все "$" на: jQuery, как и на предыдущие комментарии.
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню