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");

Однак я все ще отримую ту саму помилку. Хтось знає, що може спричинити цю проблему та як її вирішити?

Спасибі заздалегідь!

Відповіді:


260

Це проблема синтаксису, бібліотека jQuery, що входить до складу WordPress, завантажується в режимі "без конфлікту". Це робиться для запобігання проблемам сумісності з іншими бібліотеками javascript, які WordPress може завантажувати. У режимі "no-confict" ярлик $ недоступний і використовується довший jQuery, тобто

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

Включаючи $ в дужки після виклику функції, ви можете потім використовувати цей ярлик у кодовому блоці.

Для отримання детальної інформації див. Кодекс WordPress


Я повинен додати, що вам потрібно втратити "jQuery" наприкінці
RedEyedMonster

3
Ви такий ЖИТТЕВЕКТОР !!! Через 3 дні налагодження я виявив, що це саме рішення для моєї проблеми. Хоча WordPress завантажував файл jQuery, я не міг отримати доступ до функцій, згаданих у документі, готовим. Тож саме цей рядок коду, тобто jQuery(document).ready(function ($) {виправив це назавжди. Дякую тоні за обмін.
Девнер

2
це те саме питання і в Drupal. Рішення працює і там. Дякую
Йогеш Гупта

35

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

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

Виклик jQuery за допомогою покажчика функції - це ярлик для $ (document) .ready (...)

Або як ми говоримо в coffeescript:

jQuery ($) ->
  # code here

Якщо $це вже екземпляр jquery - будь-яка причина передати jQueryі $ще раз назвати його ім'ям?
zerkms

2
$ може не бути екземпляром jQuery, якщо він конфліктує з іншою бібліотекою - режим без конфліктів.
Джуліан

4
Це ярлик $(document).ready(), а не$(document).on('load')
Кевін Б

Це спрацювало для мене! Усі функції custom.js у моїй темі незрозуміло зламалися. Я замінив $ (документ) .ready (function () {на це, і він працював як магія :)
Ira Herman


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 Downside: - Можливо - конфлікт з деякими плагінами Wordpress - на моїй стороні нічого не помічено
RunsnbunsN

-1

можливо, у вас є такий код перед jquery:

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

і їм був конфлікт

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


1
Я використовував його як var $=jQuery.noConflict();моє налаштування Java-webapp, але я отримав ту ж помилку!
coding_idiot
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.