JQuery - $ не визначено


486

У мене просте подія jquery click

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

і посилання jquery, визначене в site.master

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

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

$ не визначено

і жоден з jquery не працює. Я також спробував різні варіанти цього типу $ (document) .ready і jQuery і т.д.

Це додаток MVC 2 на .net 3.5, я впевнений, що я справді щільний, всюди в Google говорять, щоб перевірити, чи файл посилається правильно, що я перевірив і перевірив ще раз, будь ласка, порадьте! : /


6
Чи дійсно ви бачите, як jquery-1.3.2.js запитували та завантажували код відповіді HTTP200, якщо ви перевіряєте завантаження сторінки інструментом Fiddler?
— наївісти

18
ваш сценарій виконується перед jquery?
— Суря

2
Чи можете ви переглянути джерело та натисніть на посилання js. Схоже, ваш jquery не завантажується на сторінку. Спробуйте екран консолі Firebug, щоб побачити помилки. Спробуйте також ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js у своєму тезі сценарію
— nemke

2
Чи запускається ваш сценарій до завантаження джерела jquery?
— Дейв Бахер

1
@ Surya / Dave, я пішов додому зараз, тому я завтра перевіряю це знову, і повернусь, і пошлю, але я думаю, що, мабуть, питання,: / як непохитно!
— Пол Крісі

Відповіді:


560

Ця помилка може бути викликана лише однією з трьох речей:

  1. Ваш файл JavaScript неправильно завантажується на вашу сторінку
  2. У вас є бочкова версія jQuery. Це може статися тому, що хтось редагував основний файл, або плагін, можливо, перезаписав змінну $.
  3. У вас працює JavaScript до повного завантаження сторінки, і, таким чином, до повного завантаження jQuery.

Перш за все, переконайтеся, що сценарій викликається правильно, він повинен виглядати

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

і не повинен мати атрибути асинхронні або Defer .

Потім слід перевірити чисту панель Firebug, щоб перевірити, чи файл фактично завантажений. Якщо ні, то він буде виділений червоним кольором і біля нього буде сказано "404". Якщо файл завантажується належним чином, це означає, що проблема - номер 2.

Переконайтеся, що весь код jQuery JavaScript запускається всередині коду, наприклад:

$(document).ready(function () {
  //your code here
});

Це забезпечить завантаження вашого коду після ініціалізації jQuery.

Останнє, що потрібно перевірити - переконатися, що ви не завантажуєте жодних плагінів, перш ніж завантажувати jQuery. Плагіни розширюють об’єкт "$", тому якщо ви завантажите плагін перед завантаженням ядра jQuery, то ви отримаєте описану помилку.

Примітка: Якщо ви завантажуєте код, який не вимагає запуску jQuery, його не потрібно розміщувати всередині jQuery-обробника. Цей код може бути відокремлений за допомогою document.readyState.


182
Щодо блоку коду, $(document)він також не працюватиме, якщо у вас не буде тегу сценарію, включаючи jQuery перед цим твердженням ...
— PatrikAkerstrand

3
Я хотів би додати, що у мене була та сама проблема, що і в ОП, і моя проблема полягала в тому, що використання https з бібліотекою jquery працює не так добре.
— Майк Чіл

20
(функція ($) {}) (jQuery);
— JackMahoney

2
@Patrik: Дивіться мою відповідь на вирішення, використовуючи розділ сценаріїв у вікні. Таким чином, jquery буде завантажений спочатку і $ буде правильно визначено.
— angularsen

1
Перевірте, чи є у вас асинхронізація і в сценарії, саме це спричинило проблему в моєму випадку.
— Андерс

207

Можливо, у вас є тег сценарію, викликаний до виклику сценарію jquery.

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

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

Результати як $ не визначені

Поставте jquery.js перед тегом сценарію, і він буде працювати;) так:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>

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

1
Це чудова відповідь. Я спробував це, і це спрацювало на мене. Я використовую VS 2013 та ASP.net. Чи знаєте ви, як я можу зробити завантаження JavaScript перед тим, як сторінка автоматично завантажується на asp.net, чи мені доводиться таким чином посилатися на JavaScript у всіх своїх файлах?
— Пт

Щоб додати свою відповідь. У ASP.net ви можете піти в Shared_Layout.cshtml `<HEAD> </ HEAD>`
— Pat

@pat і переконайтеся , що ви пишете код всередині @section Scriptsтега
— Marc

Будь ласка, оновіть відповідь, щоб використовувати HTTPS, і розглянути можливість використання SPI devdocs.io/html/attributes#integrity-attribute
— Джош Хабдас

65

Спочатку потрібно переконатися, що сценарій jQuery завантажений. Це може бути з CDN або локального на вашому веб-сайті. Якщо ви не завантажуєте це спочатку перед тим, як спробувати використовувати jQuery, це скаже вам, що jQuery не визначений.

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

Це може бути в HEAD або в нижньому колонтитулі сторінки, просто переконайтеся, що ви завантажуєте його, перш ніж спробувати зателефонувати на будь-який інший матеріал jQuery.

Тоді вам потрібно скористатися одним із двох рішень нижче

(function($){
// your standard jquery code goes here with $ prefix
// best used inside a page with inline code, 
// or outside the document ready, enter code here
 })(jQuery); 

або

jQuery(document).ready(function($){
// standard on load code goes here with $ prefix
// note: the $ is setup inside the anonymous function of the ready command
});

майте на увазі, що багато разів $ (document) .ready (function () {// код тут}); не вийде.


1
"jQuery не визначено". Однак він існує після завантаження сторінки.
— Пол Тоцке

Не впевнений, це питання чи заява, але я би перевірив, що ви телефонуєте за сценарій jQuery, перш ніж спробувати його використовувати. Це здається, що ви завантажуєте його в колонтитул і викликаєте речі вище на сторінці.
— Ендрю Кіллен

Вибачте, я подумав, що це техніка, що ви можете використовувати сценарії в будь-якому порядку. Так, я використовував це в розділі кузова в стилі MVC. mycode.js, тоді jQuery.js - це останні 2 речі на сторінці.
— Пол Тоцке

Не хвилюйтесь, Павло, я відредагував рішення, щоб включити "Ви повинні спочатку завантажити". :)
— Ендрю Кіллен

Чи вирішує це проблема "Мої сценарії в правильному порядку, але сценарії завантажуються в іншому порядку". Я пам'ятаю, що робив щось подібне 4 роки тому, але не можу пригадати, яку проблему вона вирішила.
— Пол Тоцке

50

Якщо виклик плагін jQuery знаходиться поруч із </body>, а ваш сценарій завантажений до цього, ви повинні змусити ваш код запускатись після window.onloadподії, наприклад:

window.onload = function() {
  //YOUR JQUERY CODE
}

`

тож ваш код запуститься лише після завантаження вікна, коли всі активи завантажені. У цьому пункті $буде визначено jQuery ( ).

Якщо ви користуєтесь цим:

$(document).ready(function () {
  //YOUR JQUERY CODE
});

`

$ще не визначена в цей час, так як він викликається перед завантаженням JQuery, і ваш скрипт не працюватиме в цій першому рядку на консолі.


Взагалі погана ідея пов'язати з window.unload. Це буде фактично єдиною подією, яка проходить !!!
— Руді Стридом

Примітка. Пам'ятайте, що ви можете призначити лише одну функцію window.onload, якщо ви призначите їй іншу функцію, попередня не буде виконуватися.
— Бруно Перес

28

Я просто зробив те саме, і виявив, що у мене було багато

type="text/javacsript"

Тож вони завантажувались, але більше не підказували, чому це не працює. Потрібно сказати, що правильне написання виправлено це.


Примітка модератора : друкарська помилка в цій публікації є навмисною , щоб проілюструвати точку. Будь ласка, не редагуйте публікацію, щоб "виправити" це.
— Martijn Pieters

23

Використовуйте розділ сценаріїв у перегляді та головному макеті.

Розмістіть усі свої сценарії, визначені у вашому представленні, у розділі Сценарії подання. Таким чином, ви можете мати основний макет завантажувати це після завантаження всіх інших сценаріїв. Це налаштування за замовчуванням при запуску нового веб-проекту MVC5. Не впевнений у попередніх версіях.

Перегляди / Foo / MyView.cshtml:

// The rest of your view code above here.

@section Scripts 
{ 
    // Either render the bundle defined with same name in BundleConfig.cs...
    @Scripts.Render("~/bundles/myCustomBundle")

    // ...or hard code the HTML.
    <script src="URL-TO-CUSTOM-JS-FILE"></script>

    <script type="text/javascript">
      $(document).ready(function () {

        // Do your custom javascript for this view here. Will be run after 
        // loading all the other scripts.            
      });
    </script>
}

Перегляди / Спільний / _Layout.cshtml

<html>
<body>
    <!-- ... Rest of your layout file here ... -->

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

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


2
Примітка: Перегляди розділів не підтримуються в часткових переглядах дизайном.
— Адам Нейлор

Це те, що я повинен був зробити для свого виправлення .... і, мабуть, я мав знати, що краще використовувати @Scripts в першу чергу, але забув про це, поки не шукав виправлення.
— Каверман

12

переконайтеся, що ви дійсно завантажуєте jquery, це не jquery - це інтерфейс!

  <script language="JavaScript" 
    src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js">
  </script>

Це правильне джерело сценарію для jquery:

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

11

Як було сказано вище, це відбувається через конфлікт змінної $.

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

var $j = jQuery.noConflict();

а потім використовувати його будь-де

$j( "div" ).hide();

Більш детальну інформацію можна знайти тут


8

Це означає, що ваша бібліотека jQuery ще не завантажена.

Ви можете перемістити свій код, витягнувши бібліотеку jQuery.

або ви можете використовувати щось подібне

window.onload = function(){
  // Your code here
};  

Це запускається після завантаження DOM, але не тоді, коли завантажуються елементи керування, javascript та інші програми, що працюють у фоновому режимі. Для цього потрібно використовувати часову затримку.
— Фанданго68


5

після деяких тестів я знайшов швидке рішення, ви можете додати верхню частину своєї індексної сторінки:

<script>
$=jQuery;
</script>

це працює дуже добре :)


4
питання було: $ не визначено, ні?
— Мімуні

Uncaught ReferenceError: jQuery не визначено
— Simon Schnell

Ви помістили його прямо під імпорт бібліотеки jQuery?
— Майк Уоррен

4

Я отримав те саме повідомлення про помилку, коли помилково написав посилання jQuery і замість цього type="text/javascript"ввів "... javascirpt". ;)


Еврика! У мене було своє type="text/css". Дякую за збереження моєї розумності!
— Єрико

Я губив і мав type="javascript". Витратив 30 хвилин на пошук.
— муляр

4

Здається, що jQuery не завантажується належним чином. Яке джерело / версію ви використовуєте?

Крім того, це може бути зіткнення простору імен, тому спробуйте використовувати jQuery явно, а не використовувати $. Якщо це працює, ви можете скористатися, noConflictщоб інший код, який ви використовуєте $, не зламався.


3

Ця помилка означає, що jQuery ще не завантажений на сторінку. Використання $(document).ready(...)або будь-який його варіант не принесе користі, як $і функція jQuery.

Тут window.onloadслід працювати. Зауважте, що лише одна функція може бути призначена window.onload. Щоб уникнути втрати оригінальної логіки завантаження, ви можете прикрасити оригінальну функцію так:

originalOnload = window.onload;
window.onload = function() {
  if (originalOnload) {
    originalOnload();
  }
  // YOUR JQUERY
};

Це виконає функцію, якій було призначено спочатку window.onload, а потім виконає // YOUR JQUERY.

Дивіться https://en.wikipedia.org/wiki/Decorator_pattern для отримання більш детальної інформації про візерунок декораторів.



2

У рішенні згадується - "Одне останнє, що потрібно перевірити, - це переконатися, що ви не завантажуєте жодних плагінів перед завантаженням jQuery. Плагіни розширюють об'єкт" $ ", тому якщо ви завантажуєте плагін перед завантаженням ядра jQuery, тоді ви я отримаю описану вами помилку. "

Щоб уникнути цього -

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


1

У мене була ця проблема один раз без видимих ​​причин. Це відбувалося локально, поки я бігав через сервер розробки aspnet. Це працювало, і я повернув все до стану, коли раніше працював і досі не працював. Я заглянув у хромовий налагоджувач і jquery-1.7.1.min.js завантажився без проблем. Це все було дуже заплутано. Я досі не знаю, в чому проблема, але закрити веб-переглядач, закрити сервер розробки та повторити спробу.


1

Просто розмістіть URL-адресу jquery вгорі коду jquery

подобається це--

<script src="<%=ResolveUrl("~/Scripts/jquery-1.3.2.js")%>" type="text/javascript"></script>

<script type="text/javascript">
    $(function() {
        $('#post').click(function() {
            alert("test"); 
        });
    });
</script>

1

У мене була така ж проблема, і це було тому, що моє посилання на jQuery.js не було в тезі. Як тільки я переключив це, все почало працювати.

Ентоні


1
  1. Перевірте, чи включений точний шлях файлу jquery.

    <script src="assets/plugins/jquery/jquery.min.js"></script>

якщо ви додасте це внизу сторінки, будь-ласка, зателефонуйте всім JS до цієї декларації.

  1. Перевірте за допомогою цього тесту коду,

    <script type="text/javascript">
    /***
     * Created by dadenew
     * Submit email subscription using ajax
     * Send email address
     * Send controller
     * Recive response
     */
    $(document).ready(function() { //you can replace $ with Jquery
    
      alert( 'jquery working~!' );
    });

Мир!


0

У нас така ж проблема .... але випадково я перевірив властивості папки і щось встановив ...

Ви повинні перевірити властивості кожної папки, до якої ви маєте доступ ..

  1. клацніть правою кнопкою миші папку
  2. вкладка "дозволи"
  3. встановлення доступу до папки: ВЛАСНИК: створення та видалення файлів ГРУПА: доступ до файлів ДРУГІ: файли доступу

Я сподіваюся, що це рішення ......


0

Якщо ви використовуєте jQuery на asp.net, якщо ви використовуєте головну сторінку і ви завантажуєте туди вихідний файл jquery, переконайтеся, що у вас є власник вмісту заголовка після всіх посилань сценарію jquery.

У мене виникла проблема, коли на будь-яких сторінках, які використовували цю головну сторінку, повертається "$ не визначено", просто тому, що неправильний порядок змушує код клієнтської сторони виконуватись до створення об'єкта jquery. Тому переконайтесь, що у вас є:

<head runat="server">
    <script type="text/javascript" src="Scripts/jquery-VERSION#.js"></script>
    <asp:ContentPlaceHolder id="Header" runat="server"></asp:ContentPlaceHolder>
</head>

Таким чином код запуститься в порядку, і ви зможете запустити код jQuery на дочірніх сторінках.


0

У моєму випадку я вказував на розміщення JQuery в Google. Він був включений належним чином, але я був на сторінці HTTPS і дзвонив через HTTP. Після того, як я виправив проблему (або дозволив небезпечний вміст), він запустився прямо.


0

У мене була ця сама проблема і я не міг зрозуміти, що її викликає. Нещодавно я перетворив свої HTML-файли з японського на UTF-8, але нічого не зробив із файлами скриптів. Якось jquery-1.10.2.min.js зіпсувався в цьому процесі (я досі не знаю як). Заміна jquery-1.10.2.min.js оригінальним виправленим ним.


0

виявляється, що якщо ви знайдете файли jquery.js у тій самій папці або в деяких папках, де знаходиться ваш html-файл, проблема Firebug вирішена. Наприклад, якщо ваш html знаходиться під C: / folder1 /, то ваші js-файли повинні бути десь під C: / folder1 / (або C: / folder1 / folder2 тощо), а також адресовано відповідним чином у html doc. сподіваюся, що це допомагає.


0

У мене те саме питання, і жоден випадок не вирішує мене проблеми. Єдине, що для мене працює - це розмістити у файлі Site.master наступне:

<script src="<%= ResolveUrl("~/Scripts/jquery-1.7.1.min.js") %>" type="text/javascript"></script>
<script src="<%= ResolveUrl("~/Scripts/bootstrap/js/bootstrap.min.js") %>" type="text/javascript"></script>

З src = "<% = ResolveUrl (" ") ... завантаження jQuery на сторінки вмісту є правильним.


0

У мене було дуже схоже питання. У моєму додатку C # MVC JQuery не розпізнавався. Мені потрібно було перемістити @ Scripts.Render ("~ / bundles / jquery") знизу мого файлу _Layout.cshtml до голови розділу. Також переконайтесь, що ви схопили Jquery як пакет Nuget, якщо ви використовуєте візуальну студію!

<head>
    @Scripts.Render("~/bundles/jquery")
</head>

0

Існує спосіб змусити його автоматично завантажувати JavaScript перед запуском решти коду.

Перейдіть у меню Перегляди \ Shared_Layout.html та додайте наступне

<head>
  <*@ Omitted code*@>
  <script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</head>

0

якщо scriptтег має deferатрибут, він показує помилку

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

і повинен видалити атрибут deferз scriptтегу


0

Це загальне питання, щоб вирішити це, вам доведеться перевірити якийсь момент

  1. Включити головну бібліотеку Jquery
  2. Перевірте проблему між браузером
  3. Додайте Бібліотеку в ТОП коду jquery
  4. Перевірте, чи CDN можуть бути заблоковані.

Повна інформація наведена в цьому блозі. Натисніть тут

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