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.