2009-12-06 2 views
26

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

<script type="text/javascript"> 

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

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

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

+2

Можете ли вы опубликовать свой PHP-код? – SimonDever

+1

Опубликуйте полученные вами ошибки.Если вы используете firefox, консоль ошибок может быть доступна через «Инструменты> Консоль ошибок» – Yacoby

+0

Используете ли вы какие-либо другие фреймворки javascript? Правильно ли указан путь к вашему файлу jquery? – nowk

ответ

30

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

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

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

+1

Я видел этот точный точный вопрос много раз - и это был почти всегда тег jQuery

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

поджигатель говорит, что \t \t $ (документ) .ready (функция() { не определен ... это что-то не так с моим файлом JQuery? –

+0

Вы используете Mootools? ... если да, то убедитесь, что у вас есть JQuery для совместимости – Mottie

+0

, если он говорит, что $ (document) .... не является функцией, которая означает, что 1) другая библиотека захватывает $ или что jQuery неправильно загружается. – helloandre

24

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

$(document).ready(null); 

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

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

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

+0

Не похоже на недавний jQuery: http://jsfiddle.net/0g5ae8y3/ – Tgr

+0

Например, я использовал ранее не определенную переменную как вход селектора в '$(). Каждый обратный вызов цикла. –

-3

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

попробовать

$ (документ) .ready (а());

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

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

+6

Если ваша функция abc не возвращает функцию, этот код не делает то, что вы думаете. abc выполнит и отправит возвращаемое значение в $ (document) .ready(). Если возвращаемое значение равно нулю, вы можете вызвать проблемы для других, как я объяснил в своем ответе. Вы могли бы просто сделать abc(); или (function() {...})(); – gregers

-4

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

1

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

Убедитесь, что 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); 

Обратите внимание, что $ (документ) .ready (INIT) помещается в конце.

3

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

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

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

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

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

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

throw new Error() 

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

console.error() 

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

1

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

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

0

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

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

Смежные вопросы