В 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));
Обратите внимание, что функция, указанная выше, вызывается мгновенно и не определена.
$(function(){ alert(...); });
на всякий случай… Также посмотрите, как вы определяете тег 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">
и все проблемы ушли!