it-swarm.com.ru

Почему $ (document). Уже не увольняет меня?

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

<script type="text/javascript">

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

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

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

28
never_had_a_name

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

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

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

30
David

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

$(document).ready(null);

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

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

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

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

Также посмотрите, как вы определяете тег включения 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"/>
3
raoulsson

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

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

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

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

1
Pramod

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

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

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

throw new Error()

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

console.error()

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

1
Michael R

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

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

1
Adam

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

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

0
Tomas Kubes

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

<script type="text/javscript">

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

<script>

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

0
littledynamo