Почему $ (документ) уже не стреляет?

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

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

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

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

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

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

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

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

 $(document).ready(null); 

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

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

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

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

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

Работает:

 <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"/> 

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

Убедитесь, что 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) помещается в конец.

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

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

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

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

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

 throw new Error() 

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

 console.error() 

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

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

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

В моем случае document.ready не был вызван, потому что форма html была отправлена ​​на сервер по запросу Ajax, и только часть документа была возвращена – и готовый документ не вызывается после запроса ajax.

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

вместо $ (document) .ready (function () {…});

пытаться

$ (document) .ready (abc ());

функция abc () {….}

работал на меня. Я сам искал много мест, но не смог найти решение. Пробовал это случайно и работал!

У меня была такая проблема, просто изменил <script type="text/javascript"> на <script type="javascript"> и все проблемы ушли!