jQuery Uncaught TypeError: Свойство '$' объекта [окно объекта] не является функцией

92

Все, я загрузил готовое приложение формы JS / CSS и пытаюсь использовать его в Wordpress. У меня есть такой код:

$(document).ready(function () {


/*----------------------------------------------------------------------*/
/* Parse the data from an data-attribute of DOM Elements
/*----------------------------------------------------------------------*/


$.parseData = function (data, returnArray) {
    if (/^\[(.*)\]$/.test(data)) { //array
        data = data.substr(1, data.length - 2).split(',');
    }
    if (returnArray && !$.isArray(data) && data != null) {
        data = Array(data);
    }
    return data;
};

/*----------------------------------------------------------------------*/
/* Image Preloader
/* http://engineeredweb.com/blog/09/12/preloading-images-jquery-and-javascript
/*----------------------------------------------------------------------*/



// Arguments are image paths relative to the current page.
$.preload = function() {
    var cache = [],
        args_len = arguments.length;
    for (var i = args_len; i--;) {
        var cacheImage = document.createElement('img');
        cacheImage.src = arguments[i];
        cache.push(cacheImage);
    }
};


/*----------------------------------------------------------------------*/
/* fadeInSlide by revaxarts.com
/* Fades out a box and slide it up before it will get removed
/*----------------------------------------------------------------------*/


$.fn.fadeInSlide = function (speed, callback) {
    if ($.isFunction(speed)) callback = speed;
    if (!speed) speed = 200;
    if (!callback) callback = function () {};
    this.each(function () {

        var $this = $(this);
        $this.fadeTo(speed / 2, 1).slideDown(speed / 2, function () {
            callback();
        });
    });
    return this;
};


/*----------------------------------------------------------------------*/
/* fadeOutSlide by revaxarts.com
/* Fades out a box and slide it up before it will get removed
/*----------------------------------------------------------------------*/


$.fn.fadeOutSlide = function (speed, callback) {
    if ($.isFunction(speed)) callback = speed;
    if (!speed) speed = 200;
    if (!callback) callback = function () {};
    this.each(function () {

        var $this = $(this);
        $this.fadeTo(speed / 2, 0).slideUp(speed / 2, function () {
            $this.remove();
            callback();
        });
    });
    return this;
};

/*----------------------------------------------------------------------*/
/* textFadeOut by revaxarts.com
/* Fades out a box and slide it up before it will get removed
/*----------------------------------------------------------------------*/


$.fn.textFadeOut = function (text, delay, callback) {
    if (!text) return false;
    if ($.isFunction(delay)) callback = delay;
    if (!delay) delay = 2000;
    if (!callback) callback = function () {};
    this.each(function () {

        var $this = $(this);
        $this.stop().text(text).show().delay(delay).fadeOut(1000,function(){
            $this.text('').show();
            callback();
        })
    });
    return this;
};

/*----------------------------------------------------------------------*/
/* leadingZero by revaxarts.com
/* adds a leding zero if necessary
/*----------------------------------------------------------------------*/


$.leadingZero = function (value) {
    value = parseInt(value, 10);
    if(!isNaN(value)) {
        (value < 10) ? value = '0' + value : value;
    }
    return value;
};


});

Я предполагал, что Wordpress не вызывает конфликта, поэтому обновил самую последнюю скобку, чтобы она выглядела следующим образом:

}, "jQuery");

Однако я все еще получаю ту же ошибку. Кто-нибудь знает, что вызывает эту проблему и как ее решить?

Заранее спасибо!

user1048676
источник

Ответы:

260

Это проблема синтаксиса, библиотека jQuery, включенная в WordPress, загружается в режиме «без конфликтов». Это сделано для предотвращения проблем совместимости с другими библиотеками javascript, которые может загружать WordPress. В режиме «без конфликтов» ярлык $ недоступен, и используется jQuery дольше, т.е.

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

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

Для получения полной информации см. Кодекс WordPress.

КрасноглазыйМонстр
источник
Я должен добавить, что вам нужно потерять "jQuery" в конце
RedEyedMonster
3
Ты такой ЖИЗНИ СПАСАТЕЛЬ !!! После 3 дней отладки я обнаружил, что это точное решение моей проблемы. Хотя WordPress загружал файл jQuery, я не мог получить доступ к функциям, упомянутым в готовом документе. Итак, эта точная строка кода, то есть jQuery(document).ready(function ($) {исправлена ​​навсегда. Большое спасибо за то, что поделились.
Devner
2
это та же проблема и в Drupal. Решение там тоже работает. Спасибо
Йогеш Гупта 05
35

Моя любимая бесконфликтная конструкция:

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

Вызов jQuery с указателем на функцию - это ярлык для $ (document) .ready (...)

Или, как мы говорим в coffeescript:

jQuery ($) ->
  # code here
Юлиан
источник
Если $это уже экземпляр jquery - есть ли причина передать jQueryему $имя еще раз?
zerkms
2
$ может не быть экземпляром jQuery, если он конфликтует с другой библиотекой - режим без конфликтов.
Julian
4
Это ярлык $(document).ready(), а не$(document).on('load')
Kevin B
Это сработало для меня! Все функции custom.js в моей теме по необъяснимой причине сломались. Я заменил $ (document) .ready (function () {на это, и это сработало как по волшебству :)
Ира Герман
6

В Wordpress просто замените

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

с участием

jQuery(function(){...});
Шашанк Агарвал
источник
1

Вы можете заменить скрипт jQuery по умолчанию WordPress на библиотеку Google, добавив что-то вроде следующего в файл functions.php темы:

function modify_jquery() {
    if (!is_admin()) {
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', false, '1.10.2');
        wp_enqueue_script('jquery');
    }
}
add_action('init', 'modify_jquery');

Код взят отсюда: http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/

П.воинов
источник
Лучшее решение, если вы используете «внешние» плагины JQuery вне WP. Даунсайд: - Могло - конфликтовать с некоторыми плагинами Wordpress - с моей стороны ничего не замечено
RunsnbunsN
-1

возможно, у вас есть такой код перед jquery:

var $jq=jQuery.noConflict();
$jq('ul.menu').lavaLamp({
    fx: "backout", 
    speed: 700
});

и у них был конфликт

вы можете изменить $ на (jQuery)

S-kias
источник
1
Я использовал его, как будто var $=jQuery.noConflict();Mine - это установка java-webapp, но у меня такая же ошибка!
coding_idiot