Uncaught ReferenceError: $ не визначено?


657

Чому цей код кидає

Uncaught ReferenceError: $ не визначено

коли це було нормально раніше?

$(document).ready(function() {
    $('#tabs > ul').tabs({ fx: { opacity: 'toggle' } });
    $('#featuredvid > ul').tabs();
});

Результати на вкладках більше не закриваються.

jQuery посилається в заголовку:

<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/sprinkle.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-ui-personalized-1.5.2.packed.js"></script>

<script language = "JavaScript" type = "text / javascript" src = "<? php echo get_option ('siteurl')?> / js / jquery-1.2.6.min.js"> </script> Візьміть це на вгорі
капітан

У моєму випадку JQuery був у розділі колонтитулу, тому функція JS була викликана спочатку.
Даніель Белтрамі

Чи відповідає це на ваше запитання? ReferenceError: $ не визначено
Брінн

Відповіді:


687

Спершу слід поставити посилання на сценарії jquery.

<script language="JavaScript" type="text/javascript" src="/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/jquery-ui-personalized-1.5.2.packed.js"></script>
<script language="JavaScript" type="text/javascript" src="/js/sprinkle.js"></script>

27
Щоб переконатися, що це зрозуміло: ви не можете ставити посилання сценарію на jquery-ui перед самим сценарієм jquery. Ось що і вирішило для мене проблему: спочатку jquery-xxxmin.js, потім jquery-ui-xxxxxx.js.
Вагнер да Сілва

26
Через 2 роки відповідь все ще не "поставлена". Ця стаття описує цей і ще 4 поширені випадки, коли виникає ця помилка.
Узбекйон

2
@Uzbekjon Це вирішило це для мене. Шлях до сценарію був неправильним в одному з моїх HTMLфайлів.
Адам Йенсен

@Jeremy, велике спасибі Також поставте його перед будь-яким частковим переглядом (mvc), щоб він був доступний для будь-якого сценарію в частковому.
Андрій День

1
@Uzbekjon майже 10 років, і це досі не позначається. Дякуємо, що надали посилання на статтю.
Модо

235

Ви викликаєте функцію готовості до включення JavaScript jQuery. Спочатку посилайтесь на jQuery.


30
@RamSharma Насправді це правильна відповідь. Вам не потрібно нічого іншого, щоб вирішити проблему.
Дерек 朕 會 功夫

Так. Це була моя проблема. Просто було jquery ПІСЛЯ посилання на мій js-файл. D'oh!
dogonaroof

У моєму випадку мені довелося видалити ключ відкладення з <script src = "/ js / jquery-1.2.6.min.js" defer> </script>
Чарден Даксічен

123

Це те, що вирішило це для мене. Спочатку я зайшов у Google, скопіював і вставив запропонований фрагмент для jQuery на свою сторінку CDN:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

У фрагменті не входить атрибут HTTP:або HTTPS:в srcатрибут, але мій веб-переглядач FireFox потрібен, тому я змінив його на: редагувати: це працювало і для Google Chrome

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

Тоді це спрацювало.


13
Строго кажучи, фрагмент / приклад Google є правильним - їх атрибут src - це протокол, що не містить протоколу, що означає, що браузер повинен використовувати протокол (HTTP / HTTPS) сторінки виклику. Див. Paulirish.com/2010/the-protocol-relative-url . Це найкраща практика, щоб уникнути попереджень із змішаним вмістом, якщо ваша сторінка коли-небудь подається через SSL, а сценарії - ні.
pwdst

12
Тут, мабуть, одна поширена проблема - це коли URL-адреси, що стосуються протоколу, використовуються під час розробки, а в сонячний день ви намагаєтеся завантажити сторінку з локального файлу. Ваш веб-переглядач буде оптимістично намагатися завантажити, file://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.jsі вам цікаво, чому він не відображається на мережевій консолі.
Пітер Еннес

дякую @PieterEnnes, саме так було для мене. Дякуємо і відповідачам!
jwg

43

Якщо ваш користувальницький скрипт завантажений до завантаження плагін jQuery до браузера, може виникнути такий тип проблем. Отже, завжди зберігайте свій код JavaScript або jQuery після виклику плагіна jQuery, щоб рішення для цього було:

Спочатку додайте посилання на файл jQuery, розміщений у GoogleApis, або в локальний файл jQuery, який ви завантажите з http://jquery.com/download/ та хоста на своєму сервері:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

або будь-який плагін для jQuery. Потім поставте своє посилання або код власного файлу сценарію:

<script src="js/custom.js" type="text/javascript"></script>

3
If your custom script is loaded before the jQuery plugin is loaded to the browser then this type of problem may occur Ідеальна відповідь .. у моєму випадку сценарій був у нижньому колонтитулі
echoashu

41

У моєму випадку я ставив свій .jsфайл перед посиланням сценарію jQuery, а .jsфайл після посилання сценарію jQuery вирішив мою проблему.

<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="exponential.js"></script>

Щойно використовував це, щоб виправити мій jschart.
indofraiser

це вирішило проблему, .js файл слід поставити перед посиланням сценарію jQuery.
Науковий метод

27

Гаразд, моя проблема була іншою - це була модель Document Security в Chrome .

Дивлячись на відповіді тут, було очевидно, що я якось не завантажував свої файли jquery перед тим, як викликати функції $(document).ready()etc. Однак всі вони були на правильних позиціях.

У моєму випадку це було тому, що я отримував доступ до вмісту через захищене HTTPS-з'єднання, тоді як сторінка намагалася завантажити дані, розміщені CDN, з google тощо. Рішення полягало в тому, щоб зберігати їх локально, а потім включати потім безпосередньо, а не з CDN кожного разу.

Редагувати . Інший спосіб зробити це - посилання на всі вміщені CDN файли як https: //, а не http: // - тоді модель не скаржиться.


5
Також зауважте, що ви можете залишити протокол виключення посилань, і він вибере відповідний залежно від контексту (якщо припустити, що існують і http, і https версії). Дивіться stackoverflow.com/a/3622615/4332
Адріан Муат

так. цей вирішив мою проблему, я завантажував сценарії з URL-адреси на зразок цього ´ // cdnjs.cloudflare.com / ajax / libs / jquery / 1.12.0 / jquery.min.js´. Використання " cdnjs ..." чудово працює
user9869932

25

Додайте бібліотеку перед запуском сценарію. Ви можете додати будь-який із цих нижче CDN, щоб запустити його.

Google:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

Microsoft

<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>

Jquery

Якщо вам потрібна будь-яка інша версія Jquery CDD, перевірте це посилання .

Після цього:

<script type="text/javascript">
$(function(){
    //your stuff
});
or
$(document).ready(function(){
    //your stuff
});    
</script>

Wordpress:

<script type="text/javascript">
var $ = jQuery;
jQuery(document).ready(function($){
     //your stuff
});
</script>

19

Якщо це в wordpress, можливо, знадобиться змінити

$(document).ready(function() {

до

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

або додати

var $ = jQuery;

раніше

$(document).ready(function() {

19

У мене була точно така ж проблема, і жодне з цих рішень вище не допомогло. однак я просто зв'язав .cssфайли після .jsфайлів, і проблема дивом зник. Сподіваюсь, це допомагає.


13
По-перше, для кращої продуктивності візуалізації сторінки завжди слід пов'язувати файли CSS перед файлами JS. По-друге, порядок файлів css та js не повинен впливати на поточну ситуацію.
Узбекйон

12
"Те, що вирішило вашу проблему, не повинно вирішити вашу проблему, і ви не повинні робити те, що вирішило вашу проблему."
Андрій

15

Я хотів спробувати зробити свій сценарій асинхронним . Потім я забув про це, і коли я перейшов у прямому ефірі, файл [custom] .js завантажував лише 50% часу до jQuery.js.

Так я змінився

<script async src="js/script.js"></script>

до

<script src="js/script.js"></script>

14

У моєму випадку у мене був цей посиланняError, оскільки порядок викликів сценарію був неправильним. Вирішили це, змінивши порядок:

<script src="js/index.js"></script>
<script src="js/jquery-1.10.2.js"></script>

до

<script src="js/jquery-1.10.2.js"></script>
<script src="js/index.js"></script>

1
В основному це була проблема, яку я теж виявив, коли помилка посилання трапляється для '$'
Dipak

8

У мене була така ж проблема, і я вирішив, поставивши jQuery у верхній частині всіх кодів javascript у своєму коді.

Щось на зразок цього:

<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="js/app.js" type="text/javascript"></script>
<script src="js/form.js" type="text/javascript"></script>
<script src="js/create.js" type="text/javascript"></script>
<script src="js/tween.js" type="text/javascript"></script>

Надія може допомогти комусь у майбутньому.


8

Ви викликаєте ready()функцію до включення JavaScript jQuery. Спочатку посилайтесь на jQuery.

Якщо ви перебуваєте в ASP.NET MVC, ви можете вказати, коли повинен бути наданий ваш JS-код, зробивши це:

1, у вашомуpage.cshtml обгортанні вашого <script>тегу в розділ і дайте йому ім'я, загальне ім'я - "скрипти":

@section scripts {
    <script>
        // JS code...
    </script>
}

2,_Layout.cshtml Додайте на свою сторінку @RenderSection("Scripts", required: false), переконайтеся, що ви поставите її після звернення до джерела Jquery, це зробить ваш JS-код пізніше Jquery.


6

Якщо ви робите це у .Net та маєте належний посилання на файл сценарію, і у вас jQuery виглядає чудово, переконайтеся, що ваші користувачі мають доступ до файлу сценарію. У проекті, над яким я працював (співавтором), був свій web.config, який забороняв доступ анонімним користувачам. Сторінка, над якою я працював, була доступною для анонімних користувачів, тому вони не мали доступу до файлу сценарію. У веб.config випав наступне, і у світі все було правильно:

  <location path="Scripts">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

6

У моєму випадку це був помилковий помилок, я забув зворотну косу рису і неправильно посилався на джерело.

До цього src="/scripts/jquery.js"

Після    src="scripts/jquery.js"


5

Вихідний файл jquery-1.2.6.min.jsне називається, команда jQuery $()виконується раніше, ніж<..src='jquery-1.2.6.min.js'> .

Будь ласка, запустіть <.. src="/js/jquery-1.2.6.min.js..">спочатку і переконайтеся, що шлях до src правильний, а потім виконайте команду jquery

$(document).ready(function() 

5

Це сталося зі мною раніше.

Причиною було те, що я підключаю андроїд до веб-перегляду з JS. І я надіслав параметр без лапок.

js.sayHello(hello);

і коли я змінив його

js.sayHello('hello');

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


Я не маю уявлення, що означає параметр без лапок ... це здається, що у вас була помилка посилання.
Алуан Хаддад

У мене виникла проблема у Freemarker. Причиною стала відсутність одинарних лапок, тому значення трактувалося не як рядок, а як змінна
torina

4

Ваш файл JavaScript відсутній, тому виникла помилка. Просто додайте файл JavaScript всередині <head>тегу. Дивіться приклад:

<script src="js/sample.js" type="text/javascript"></script>
<link href="css/sample.css" rel="stylesheet" type="text/css" />

або додати в тег наступний код:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

4

Помилка відбудеться і в наступних двох сценаріях.

  1. У файлі HTML відсутній елемент @section script
  2. Помилка доступу до елементів DOM. Наприклад, доступ до елемента DOM згадується як $ ("js-toggle") замість $ (". Js-toggle"). Насправді період відсутній

Отже 3 речі, яких слід дотримуватися - перевірити, чи потрібні сценарії додано, перевірте, чи вони додані у потрібному порядку та треті синтаксичні помилки у вашому Java Script.


Так. а для атрибутів id $ ('# someDiv')
cagcak

3

До! У мене були мішані цитати у своїх тегах, які спричинили розрив посилання на jquery. Перевірка в Chrome дозволила мені побачити, що файл не пов’язаний належним чином.


3

У моєму випадку я забув включити це:

 <script src ="jquery-2.1.1.js"></script>

Раніше я включав тільки jquery-mobile, який спричиняв цю помилку.


3

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


2

У мене була аналогічна проблема, і це було тому, що мені не вистачало закриття> на посилання на аркуші стилів.


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

У мене є аналогічна проблема, і ви знаєте, що це, через те, що мережу відключається, коли я перевіряю веб-перегляд пристроїв Android, і я цього не усвідомлюю, і локальний js не має проблеми з завантаженням, оскільки йому не потрібна мережа. Це здається смішним, але це витрачає мою ~ 1 годину, щоб зрозуміти це.


2

Ви не посилалися на бібліотеку jQuery.

Вам потрібно буде включити рядок, подібний до цього, у свій HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

2

У мене було подібне питання. Мій тестовий сервер добре працював із "http". Однак він не вдався у виробництві, в якому було SSL.

Таким чином, у виробництві я додав "HTPPS" замість "HTTP" і в тесті, я зберігав, як це "HTTP".

Тест:

wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Виробництво:

wp_register_script( 'jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', array(), null, false );

wp_register_script( 'custom-script', plugins_url( '/js/custom.js', __FILE__ ), array( 'jquery' ) );

Сподіваюся, це допоможе тому, хто працює над wordpress.


1

Як не дивно, моя проблема виходила з PHP.

Не вдалося здійснити виклик API REST, і це порушило завантаження бібліотек. Оскільки помилка була від виклику REST, вона не давала мені помилки компіляції PHP.

Зберігайте це також як варіант, якщо завантаження jquery здається нормальним.


1

У мене виникла ця проблема, коли я переглядав Інтернет через мобільну точку доступу. він також стискав зображення та додав наступний скрипт внизу тегу body

<script language="javascript"><!--
bmi_SafeAddOnload(bmi_load,"bmi_orig_img");//-->
</script>

Коли я підключився до належного Wi-Fi, все, здається, працює для мене. Сподіваюся, це допоможе комусь.


1

Це також може статися, якщо виникає проблема з мережею. Це означає, що навіть незважаючи на те, що "сценарії jquery" є на місці та включені до використання, оскільки jquery-скрипти недоступні, під час завантаження сторінки, отже, визначення до "$" трактуються як "невизначені посилання".

ДЛЯ ТЕСТОВИХ / ДЕБУГОВИХ ЦІЛЬ :: Ви можете спробувати отримати доступ до URL-адреси "jquery-script" у браузері. Якщо вона доступна, Ваша сторінка повинна завантажуватися належним чином, інакше вона покаже вказану помилку (або інші помилки, пов'язані зі сценарієм). Приклад - http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js має бути доступним у веб-переглядачі (або у контексті позицій браузера).

У мене була подібна проблема, при якій я мав змогу завантажити html-сторінку (за допомогою скриптів) у свій Windows-хост-браузер, але не зміг завантажити у vm-ubuntu. Вирішивши проблему з мережею, проблему було вирішено.


0
var $ = jQuery;
jQuery(document).ready(function($){

1
Це абсолютно не відповідь. Ви повинні додати деякі пояснення.
jmlemetayer

Це рішення для Wordpressвас, це слід згадати.
Гексод

Ти врятував мені день. Намагався це зробити в WordPress, і ніхто, окрім цього рішення, не працював як шарм.
rahimv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.