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

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

440 голосов
/ 03 февраля 2010

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

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

и ссылка на jquery, определенная на сайте. 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 говорят, что нужно проверить правильность ссылки на файл, что я проверил и проверил снова, пожалуйста, сообщите! : /

Ответы [ 31 ]

513 голосов
/ 03 февраля 2010

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

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

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

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

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

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

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

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

188 голосов
/ 19 декабря 2011

Возможно, ваш тег script вызывается до вызова сценария 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>
58 голосов
/ 27 января 2014

Сначала нужно убедиться, что скрипт 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}); не будет работать.

37 голосов
/ 26 июня 2014

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

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

`

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

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

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

`

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

26 голосов
/ 09 августа 2011

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

type="text/javacsript"

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

20 голосов
/ 03 декабря 2013

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

Поместите все свои сценарии, определенные в вашем представлении, в раздел Scripts вида.Таким образом, вы можете загрузить основной макет после загрузки всех других скриптов.Это настройка по умолчанию при запуске нового веб-проекта 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>
}

Просмотры / 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>

Обратите внимание, как секция scripts отображается последней в главном файле макета.

10 голосов
/ 12 июля 2015

убедитесь, что вы действительно загружаете 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>
9 голосов
/ 17 апреля 2015

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

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

var $j = jQuery.noConflict();

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

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

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

7 голосов
/ 26 июля 2016

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

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

или вы можете использовать что-то подобное

window.onload = function(){
  // Your code here
};  
7 голосов
/ 03 февраля 2010

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

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...