JQuery - $ не определено

427

У меня есть простое событие jquery click

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

и ссылка на jquery, определенная на сайте.

<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?
  • 16
    ваш скрипт выполняется до jquery?
Показать ещё 8 комментариев
Теги:
asp.net-mvc

35 ответов

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

Эта ошибка может быть вызвана только одной из трех вещей:

  • Ваш JavaScript файл не будет правильно загружен на вашу страницу.
  • У вас есть неудачная версия jQuery. Это может произойти из-за того, что кто-то редактировал основной файл, или плагин мог перезаписать переменную $.
  • У вас работает JavaScript до полной загрузки страницы и, как таковой, перед полной загрузкой jQuery.

Вы должны проверить панель Firebug, чтобы проверить, действительно ли файл загружен правильно. Если нет, он будет подсвечен красным и будет указывать "404" рядом с ним. Если файл загружается должным образом, это означает, что проблема связана с номером 2.

Убедитесь, что весь код javascript jQuery запущен внутри блока кода, например:

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

Это гарантирует, что ваш код будет загружен после. jQuery был инициализирован.

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

Примечание. Если вы загружаете код, который не требует запуска jQuery, его не нужно размещать внутри готового обработчика jQuery. Этот код можно разделить с помощью document.readyState.

  • 161
    Что касается вашего блока кода, $(document) также не будет работать, если у вас нет тега script, включающего jQuery, перед этим оператором ...
  • 2
    Я хотел бы добавить, что у меня была та же проблема, что и у OP, и моя проблема заключалась в том, что использование https с библиотекой jquery не работает так хорошо.
Показать ещё 6 комментариев
176

Возможно, у вас есть тэг script, который вызывается до вызова jquery script.

<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, и он будет работать;) вот так:

<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 таким образом во всех моих файлах?
  • 0
    Добавить к вашему ответу. В ASP.net вы можете перейти в Shared_Layout.cshtml `<head> </ head>`
Показать ещё 2 комментария
51

Для начала вам нужно убедиться, что скрипт jQuery загружен. Это может быть из CDN или локально на вашем сайте. Если вы не загрузите его сначала, прежде чем пытаться использовать jQuery, он скажет вам, что jQuery не определен.

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

Это может быть в заголовке или в нижнем колонтитуле страницы, просто убедитесь, что вы загрузили его, прежде чем пытаться вызвать любой другой материал 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() {//code here}); не будет работать.

  • 1
    msgstr "jQuery не определен". Однако существует после загрузки страницы.
  • 0
    Не уверен, что это вопрос или утверждение, но я бы проверил, чтобы вы вызвали скрипт jQuery, прежде чем пытаться его использовать. Похоже, вы загружаете его в нижний колонтитул и вызываете вещи выше на странице.
Показать ещё 4 комментария
34

Если вызов плагина jQuery находится рядом с </body>, и перед этим загружается ваш script, вы должны сделать свой код запустимым после события window.onload, например:

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

`

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

Если вы используете это:

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

`

$ пока не определен, потому что он вызывается перед загрузкой jQuery, и ваш script не будет работать в этой первой строке на консоли.

  • 0
    Вообще плохая идея привязать к window.unload. Это будет фактически единственное мероприятие, которое проходит !!!
  • 0
    Примечание: помните, что вы можете назначить только одну функцию window.onload, если вы назначите ей другую функцию, предыдущая не будет выполнена.
Показать ещё 2 комментария
25

Я просто сделал то же самое и обнаружил, что у меня было много

type="text/javacsript"

Таким образом, они загружались, но больше никаких намеков на то, почему это не работает. Излишне говорить, что правильное написание исправило это.

  • 0
    Примечание модератора : опечатка в этом сообщении является преднамеренной , чтобы проиллюстрировать точку зрения. Пожалуйста, не редактируйте сообщение, чтобы «исправить» это.
17

Используйте раздел сценариев в макете просмотра и макета.

Поместите все ваши сценарии, определенные в вашем представлении, в разделе "Скрипты" представления. Таким образом, вы можете загрузить основную компоновку после загрузки всех других скриптов. Это настройка по умолчанию при запуске нового веб-проекта MVC5. Не уверен в более ранних версиях.

Views/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>
}

Views/Shared/_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
    Примечание. Разделы вида не поддерживаются при частичном просмотре.
  • 0
    Это то, что я должен был сделать для своего исправления .... и я должен был знать, что лучше использовать @Scripts, но забыл об этом, пока не искал исправление.
8

убедитесь, что вы действительно загрузите jquery это не jquery - это ui!

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

Это правильный источник script для jquery:

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

Как указано выше, это происходит из-за конфликта переменной $.

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

var $j = jQuery.noConflict();

а затем использовать его в любом месте

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

более подробную информацию можно найти здесь

7

Используете ли вы какие-либо другие библиотеки JavaScript? Если это так, вам, вероятно, придется использовать jQuery в режиме совместимости:

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

6

Это означает, что ваша библиотека jQuery еще не загружена.

Вы можете переместить свой код после вытаскивания библиотеки jQuery.

или вы можете использовать что-то вроде этого

window.onload = function(){
  // Your code here
};  
  • 0
    Это срабатывает после загрузки DOM, но не после загрузки элементов управления, javascript и других программ, работающих в фоновом режиме. Для этого нужно будет использовать задержку.
  • 0
    Исправил ошибку, спасибо
4

Похоже, что jQuery неправильно загружается. Какой источник/версия вы используете?

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

4

У меня получилось такое же сообщение об ошибке, когда я опечатал ссылку jQuery, а вместо type="text/javascript" набрал "... javascirpt".;)

  • 0
    Эврика! У меня был мой как type="text/css" . Спасибо за сохранение моего здравомыслия!
  • 0
    Я дурак и имел type="javascript" . Потратил 30 минут на поиски.
3

после некоторых тестов я нашел быстрое решение, вы можете добавить вверху своей индексной страницы:

<script>
$=jQuery;
</script>

он работает очень хорошо:)

  • 3
    вопрос был: $ не определено, нет?
  • 0
    Это хороший хак
Показать ещё 2 комментария
2

Эта ошибка означает, что 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():

2

Я использую Url.Content и никогда не сталкивался с проблемой.

<script src="<%= Url.Content ("~/Scripts/jquery-1.4.1.min.js") %>" type="text/javascript"></script>
1

У меня была такая же проблема, и это было потому, что моя ссылка на jQuery.js не была в теге. Как только я переключил это, все начало работать.

Энтони

1

Просто разместите jquery url в верхней части вашего кода 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

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

0

если тег script имеет атрибут defer он показывает ошибку

Uncaught ReferenceError: $ не определено

и должен удалить атрибут defer из тега script

0

Есть способ сделать это автоматически загружать javascript до того, как остальная часть кода будет запущена.

Перейдите в Views\Shared_Layout.html и добавьте следующие

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

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

<head>
    @Scripts.Render("~/bundles/jquery")
</head>
0
  • Проверьте, что в вашем файле 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

У меня такая же проблема, и ни один случай не разрешает мне проблему. Единственное, что работает для меня, оно накладывается на файл 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

Это сработало для меня (проект MVC5):

<script src="~/Scripts/jquery-1.10.2.js" type="text/javascript"></script>
0

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

0

У меня была такая же проблема и я не мог понять, что ее вызывает. Недавно я преобразовал файлы HTML с японского на UTF-8, но я ничего не делал с файлами script. Как-то jquery-1.10.2.min.js был поврежден в этом процессе (я до сих пор не знаю, как). Замена jquery-1.10.2.min.js оригиналом исправил его.

0

Вы просто поместите библиотеку jQuery в раздел заголовка html:)

<head>
<script src="assets/js/jquery-1.10.2.min.js"></script>
<script src="assets/js/bootstrap.min.js"></script>
</head>
0

В моем случае я указывал на JQuery, размещенный в Google. Он был включен правильно, но я был на HTTPS-странице и вызывал его через HTTP. Как только я исправил проблему (или разрешил небезопасный контент), он выстрелил правильно.

0

При использовании jQuery в asp.net, если вы используете основную страницу и вы загружаете исходный файл jquery, убедитесь, что у вас есть заголовок contentplaceholder после всех ссылок jquery script.

У меня возникла проблема, когда любые страницы, которые использовали эту главную страницу, возвращали '$ не определен' просто потому, что неправильный порядок делал код клиента на стороне перед созданием объекта 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

Оказывается, моя проблема была довольно глупой: я поставил <script href=""> вместо <script src="">

0

У нас та же проблема.... но случайно я проверил свойства папки и установил что-то...

Вы должны проверить свойства каждой папки, к которой вы обращаетесь.

  • щелкните правой кнопкой мыши папку
  • вкладка "Разрешения"
  • установите доступ к папке:  OWNER: создание и удаление файлов  GROUP: файлы доступа  ДРУГИЕ: доступ к файлам

Я надеюсь, что это решение......

0

У меня была такая же проблема, но я снова и снова проверял свой код HTML. Предыдущий ярлык (мета-метка в моем случае) был ошибочно написан, я забыл закрыть цитаты, вызывая неточную интерпретацию браузера. Это не очень проблематичное решение проблемы, но может быть причиной той же проблемы.

-2

u просто добавьте при запуске своей страницы

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

и проверьте свою ссылку src в любой адресной строке браузера, если вы получаете код, это будет работать для вас. Асиф

-2

После того как вы попробовали все здесь без результата, я решил проблему просто, перемещая тег script src из тела в голову

  • 0
    Это не ответ на вопрос. Пожалуйста, не спам ТАК с бесполезными ответами, которые ничего не приносят в тему. Если вы считаете, что ваш опыт может помочь другим, оставьте его в качестве краткого комментария или предоставьте правильный ответ с полным объяснением решения.

Ещё вопросы

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