TypeError: $не является функцией при вызове функции jQuery

У меня есть простой jQuery script в плагине WordPress, который использует обертку jQuery следующим образом:

$(document).ready(function(){

    // jQuery code is in here

});

Я вызываю этот script из панели инструментов WordPress и загружаю его после загрузки фрейма jQuery.

Когда я проверяю страницу в Firebug, я постоянно получаю сообщение об ошибке:

TypeError: $не является функцией

$(документ).ready(функция() {

Должен ли я переносить script в эту функцию:

(function($){

    // jQuery code is in here

})(jQuery);

У меня была эта ошибка несколько раз, и я не уверен, как ее обрабатывать.

Любая помощь будет принята с благодарностью.

Ответ 1

По умолчанию, когда вы вставляете jQuery в Wordpress, вы должны использовать jQuery, а $ не используется (это для совместимости с другими библиотеками).

Ваше решение обернуть его в function будет работать нормально, или вы можете загрузить jQuery другим способом (но это, вероятно, не очень хорошая идея в Wordpress).

Если вы должны использовать document.ready, вы можете передать $ в вызов функции:

jQuery(function ($) { ...

Ответ 2

Это должно исправить:

jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});

Проще говоря, WordPress запускает собственные скрипты, прежде чем вы сможете, и они выпускают $ var, чтобы он не сталкивался с другими библиотеками. Это делает общий смысл, поскольку WordPress используется для всех видов веб-сайтов, приложений и, конечно же, блогов.

Из их документации:

Библиотека jQuery, включенная в WordPress, установлена ​​в noConflict() mode (см. wp-includes/js/jquery/jquery.js). Это необходимо для предотвращения проблемы совместимости с другими библиотеками JavaScript, которые WordPress может связываться.

В режиме noConflict() глобальный $shortcut для jQuery не является доступны...

Ответ 4

Вы можете избежать конфликтов, подобных этому

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});

Ответ 5

Попробуйте следующее:

<script language="JavaScript" type="text/javascript" src="jquery/jquery.js"></script>
<script>
    jQuery.noConflict();
    (function ($) {
        function readyFn() {
            // Set your code here!!
        }

        $(document).ready(readyFn); 
    })(jQuery);

</script>

Ответ 6

Вам нужно передать $in function()

<script>
jQuery(document).ready(function($){

// jQuery code is in here

});
</script>

Ответ 7

var $=jQuery.noConflict();

$(document).ready(function(){
    // jQuery code is in here
});

Кредит Ашвани Панвару и Циссоу: fooobar.com/questions/46035/...

Ответ 8

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

Если вы используете инкапсуляцию jQuery, это не поможет в этом случае. Пожалуйста, попробуйте, потому что я думаю, что это красивее и более очевидно, но если jQuery не определен, вы получите те же ошибки.

В конце... jQuery в настоящее время не определен.

Ответ 9

Что сработало для меня. Первой библиотекой для импорта является библиотека запросов и справа, а затем вызов метода jQuery.noConflict().

<head>
 <script type="text/javascript" src="jquery.min.js"/>
 <script>
  var jq = jQuery.noConflict();
  jq(document).ready(function(){
  //.... your code here
    });
 </script>

Ответ 10

<script>
var jq=jQuery.noConflict();
(function ($) 
    {
    function nameoffunction()
    {
        // Set your code here!!
    }

    $(document).ready(readyFn); 
    })(jQuery);

теперь используйте jq вместо jQuery

Ответ 11

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

Ответ 12

Использование

jQuery(document).

вместо

$(document).

или

Внутри функции $указывает на jQuery, как вы ожидали бы

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