jQuery Uncaught TypeError: Properti '$' dari objek [objek Window] bukan sebuah fungsi

92

Semua, saya mendownload aplikasi formulir JS / CSS prebundled dan saya mencoba menggunakannya di Wordpress. Saya punya kode berikut:

$(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;
};


});

Saya berasumsi bahwa Wordpress tidak ada konflik yang menyebabkan masalah jadi saya memperbarui braket terakhir agar terlihat seperti berikut:

}, "jQuery");

Namun, saya masih mendapatkan kesalahan yang sama. Adakah yang tahu apa yang menyebabkan masalah ini dan bagaimana menyelesaikannya?

Terima kasih sebelumnya!

pengguna1048676
sumber

Jawaban:

260

Ini adalah masalah sintaksis, pustaka jQuery yang disertakan dengan WordPress memuat dalam mode "tanpa konflik". Ini untuk mencegah masalah kompatibilitas dengan pustaka javascript lain yang dapat dimuat WordPress. Dalam mode "no-confict", $ shortcut tidak tersedia dan jQuery yang lebih lama digunakan, mis

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

Dengan memasukkan $ dalam tanda kurung setelah pemanggilan fungsi, Anda kemudian dapat menggunakan pintasan ini di dalam blok kode.

Untuk detail selengkapnya, lihat WordPress Codex

RedEyedMonster
sumber
Saya harus menambahkan Anda perlu melepaskan "jQuery" di bagian akhir
RedEyedMonster
3
Anda benar-benar PENYELAMAT HIDUP !!! Setelah 3 hari debugging, saya menemukan bahwa ini adalah solusi yang tepat untuk masalah saya. Meskipun WordPress memuat file jQuery, saya tidak dapat mengakses fungsi yang disebutkan dalam dokumen siap. Jadi baris kode yang tepat ini jQuery(document).ready(function ($) {memperbaikinya untuk selamanya. Terima kasih banyak telah berbagi.
Devner
2
ini adalah masalah yang sama di Drupal juga. Solusi juga berfungsi di sana. Terima kasih
Yogesh Gupta
35

Konstruksi favorit tanpa konflik favorit saya:

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

Memanggil jQuery dengan function pointer adalah jalan pintas untuk $ (document) .ready (...)

Atau seperti yang kami katakan di coffeescript:

jQuery ($) ->
  # code here
Julian
sumber
Jika $sudah menjadi instance jquery - ada alasan untuk lulus jQuerydan beri $nama sekali lagi?
zerkms
2
$ mungkin bukan instance jQuery jika bertentangan dengan pustaka lain - mode tanpa konflik.
Julian
4
Ini adalah jalan pintas ke $(document).ready(), bukan$(document).on('load')
Kevin B
Ini berhasil untuk saya! Semua fungsi custom.js di tema saya rusak entah kenapa. Saya mengganti $ (document) .ready (function () {dengan ini dan berfungsi seperti sulap :)
Ira Herman
6

Di Wordpress ganti saja

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

dengan

jQuery(function(){...});
Shashank Agarwal
sumber
1

Anda dapat mempertimbangkan untuk mengganti skrip jQuery WordPress default dengan Google Library dengan menambahkan sesuatu seperti berikut ini ke dalam file theme 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');

Kode diambil dari sini: http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/

p.voinov
sumber
Solusi terbaik jika Anda menggunakan plugin JQuery "eksternal" di luar WP Downside: - Bisa - konflik dengan beberapa plugin Wordpress - tidak ada yang diperhatikan di sisi saya
RunsnbunsN
-1

mungkin Anda memiliki kode seperti ini sebelum jquery:

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

dan mereka adalah Konflik

Anda dapat mengubah $ menjadi (jQuery)

S-kias
sumber
1
Saya menggunakannya seperti var $=jQuery.noConflict();Milik saya adalah pengaturan java-webapp, tetapi saya mendapat kesalahan yang sama!
coding_idiot