TypeError: 'undefined' не є функцією (оцінюючи '$ (документ)')


139
  1. Я використовую сайт WordPress.
  2. Я включаю цей сценарій у заголовок.

Коли сценарій завантажується, я отримую цю помилку:

TypeError: 'undefined' не є функцією (оцінюючи '$ (документ)')

Я поняття не маю, що це викликає або що це навіть означає.

У 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, як ви очікували.
El Yobo

2
Власне, те, що я робив, було нормальним $(document).ready(function() { // code });замість вашого $(document);... що працювало як принадність.
dcolumbus

1
Так, це те, що я пропонував - "в рамках функції $ вказує на jQuery, як ви очікували".
El Yobo

Що ж, це заощадить вам пару символів :) Детальніше про форму!! () {} () Форми самовиконання оператора .
El Yobo

Я знаю, що це старе @ElYobo, але я думаю, ви можете відредагувати свою публікацію та додати свій приклад із першого коментаря до відповіді як другий приклад. Дякую, що
заощадили

25

Використовуйте 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

Спробуйте цей фрагмент:

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

Це працювало на мене, можливо, це теж допоможе тобі.


11

У мене була ця проблема лише в Chrome.

Я спробував додати

var $ =jQuery.noConflict();

безпосередньо перед дзвоном

$(document).ready(function () {

Це спрацювало.

Дуже дякую


Дякую за це. Я знав, що можу вирішити проблему, використовуючи "jQuery" замість "$", але моя проблема полягала в тому, що вона вимикає редагування Komodo, коли пишеться таким чином, тому мені довелося вибрати між натяком / доповненням коду на $ або тим, що мій JavaScript фактично працює. Цей метод дозволить мені мати і те, і інше.
Джордж Кендрос

6

Також перевірте, чи не включається jQuery, а потім деякі компоненти / інші бібліотеки (наприклад, інтерфейс jQuery), а потім ще раз випадково включити jQuery - це переробить jQuery і скине помічники компонентів (наприклад, .datepicker) з екземпляра.


4
 ;(function($){
        // your code
    })(jQuery);

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


4

Я б цим скористався

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

2

Я також неодноразово стикався з такими проблемами в веб-носіях. Насправді це не конфлікт JS, коли ми завантажуємо html-сайт у браузер, ми не стикаємося з такою помилкою, але коли ми завантажуємо веб-сайт такого типу через localhost, ми стикаємося з такою проблемою. Це через localhost. Коли ми завантажуємо скрипти через localhost, він сканує скрипт і видає результат. Але коли ми не використовували localhost. Це просто сканувати вихід. Наприклад, коли ми пишемо php-код, замість localhost і запускаємо без хоста, ми отримуємо помилку. Але якщо код правильний і запускається через хост, ми отримуємо фактичний вихід, і коли ми використовуємо елемент Inspect, ми отримуємо код виводу у форматі HTMl, але не у форматі PHP, це відбувається через візуалізацію коду.

Це помилка візуалізації. Отже, для виправлення помилки коду jquery одним із варіантів може бути використання цього методу.

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

Цей код робить - зареєструвати "$" як змінну функції, застосувавши jquery. За замовчуванням файл .js читається лише як JavaScript.


1

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


1

Дві речі:

  1. Будьте впевнені, що перед вашим $ (документом) додано бібліотеку jQuery.
  2. Потім просто поміняйте всі "$" на: jQuery, як у попередніх коментарях.

1

загортати весь сценарій між цим ...

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

Багато бібліотек JavaScript використовують $ як функцію або ім'я змінної, як і jQuery. У випадку jQuery $ - це лише псевдонім jQuery, тому вся функціональність доступна без використання $. Якщо вам потрібно використовувати іншу бібліотеку JavaScript поряд з jQuery, поверніть керування $ назад до іншої бібліотеки з викликом $ .noConflict () . Старі посилання $ зберігаються під час ініціалізації jQuery; noConflict () їх просто відновлює.


1

Ви можете використовувати як фрагмент jQuery, так і $ in нижче. це працювало для мене

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.