Почему $ (документ). Уже не стреляет для меня? - PullRequest
29 голосов
/ 07 декабря 2009

В php-файле я использовал include, чтобы включить следующий файл js.php и до этого я включил файл jquery.

<script type="text/javascript">

$(document).ready(function(){
     alert("hello");
});
</script>

Но это не работает. Зачем? когда я пропускаю функцию $ (document) .ready, она работает.

Но мне нужен код JQuery внутри. что не так?

Ответы [ 12 ]

32 голосов
/ 07 декабря 2009

Наиболее вероятный ответ, основанный на том, что вы сказали, заключается в том, что основной файл jQuery на самом деле неправильно включен в страницу. Вам нужно что-то вроде:

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

Скорее всего, это отсутствует или напечатано неправильно.

25 голосов
/ 09 марта 2010

Другая причина, которая молча завершится ошибкой, и все оставшиеся обратные вызовы никогда не будут вызваны:

$(document).ready(null);

Так проверьте, есть ли у вас переменные или синтаксические ошибки, которые возвращают ноль. Как этот:

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

Обратите внимание, что вышеуказанная функция вызывается мгновенно и возвращается неопределенное значение.

4 голосов
/ 07 декабря 2009
  1. Проверьте, правильно ли загружен jQuery.
  2. Посмотрите на индикатор выполнения браузера: он может загружать некоторые счетчики, и документ не готов, пока они не загружены: это часто происходит, когда внешние ресурсы работают медленно.
  3. Попробуйте $(function(){ alert(...); }); на всякий случай ...
  4. Проверьте, есть ли у вас ошибки JS до этой привязки загрузки. Используйте Firefox плагин FireBug, чтобы проверить его.
3 голосов
/ 09 апреля 2013

Также посмотрите, как вы определяете тег включения jquery. Кажется, по какой-то причине вам нужно открыть и закрыть тег с двумя отдельными тегами. Использование одного тега с закрытием кажется не работает:

Работы:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>

Не работает:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"/>
1 голос
/ 12 декабря 2016

Еще один момент, который нужно проверить: возможно, у вас ошибка PHP в вашей программе. Неустранимая ошибка PHP выходит из сценария, и $(document).ready никогда не будет выполнен.

В зависимости от настроек вашего сервера или вашего CSS, вы можете не увидеть сообщение Fatal error .

1 голос
/ 29 сентября 2015

После Zakas ' Искусство генерировать ошибки JavaScript , я начал бросать свои собственные ошибки в JavaScript как подход к поиску проблем JS.

Но этот подход, к сожалению, начал вызывать сбои функций jQuery ready () для несвязанных частей сайта. (

Я узнал, что следующие разные:

throw new Error()

отличается от

console.error()

Итак, я начал использовать console.error (), и у меня все еще есть красная подсветка в консоли.

1 голос
/ 12 марта 2014

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

// jquery plugin 'jquery.ready.fix.js'
// @author Szymon Działowski
;(function ($) {
    $.fn.ready.old || $(function (r) {
        r = $.fn.ready;
        $.fn.ready = function (fn) {    $.isReady ? fn() : r(fn);    };
        $.fn.ready.old = r;
    });
})(jQuery);

после этого вы можете запустить код:

$(function () {alert('go')})

и это всегда пожарная тревога.

PS: это методика, называемая "утка", подробнее о: http://www.paulirish.com/2010/duck-punching-with-jquery/

1 голос
/ 16 декабря 2012

Я тоже столкнулся с подобной проблемой, и это то, что я сделал.

Убедитесь, что document.ready помещено после , функция обратного вызова определена в вашем файле JavaScript.

Здесь init еще не определен, когда анализируется document.ready.

//won't work
$(document).ready(init);
var init = function() {
   console.log('init not called');
}

Правильный метод:

//Works
var init = function() {
   console.log('document is ready');
}
$(document).ready(init);

Обратите внимание, что $ (document) .ready (init) находится в конце.

0 голосов
/ 25 мая 2018

Только что это обрезалось, и это оказалось орфографической ошибкой в ​​теге script:

<script type="text/javscript">

Обратите внимание на отсутствующее «а» в javascript. Меняется просто:

<script>

Исправлена ​​проблема.

0 голосов
/ 26 октября 2017

В моем случае document.ready не был вызван, потому что HTML-форма была отправлена ​​на сервер по запросу Ajax , и только часть документа была получена - и документ готов не вызывается после запроса AJAX.

В результате некоторые кнопки, которые были на той части, которая была перезагружена, больше не были привязаны к событиям .click () atc .. больше, потому что эти кнопки были новыми, и привязка этих событий была вызвана во время готовности документа только в первый раз - не для AJAX .

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