jQuery Uncaught TypeError: la proprietà '$' dell'oggetto [object Window] non è una funzione


92

Tutto, ho scaricato un'applicazione JS / CSS precompilata e sto cercando di usarla in Wordpress. Ho il seguente codice:

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


});

Presumevo che Wordpress nessun conflitto stesse causando un problema, quindi ho aggiornato l'ultima parentesi in modo che assomigliasse al seguente:

}, "jQuery");

Tuttavia, ricevo ancora lo stesso errore. Qualcuno sa cosa sarebbe il caso di questo problema e come risolverlo?

Grazie in anticipo!

Risposte:


260

Questo è un problema di sintassi, la libreria jQuery inclusa con WordPress viene caricata in modalità "nessun conflitto". Questo per evitare problemi di compatibilità con altre librerie javascript che WordPress può caricare. In modalità "no-confict", la scorciatoia $ non è disponibile e viene utilizzata la jQuery più lunga, es

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

Includendo $ tra parentesi dopo la chiamata alla funzione è quindi possibile utilizzare questa scorciatoia all'interno del blocco di codice.

Per i dettagli completi, vedere il codice WordPress


Dovrei aggiungere che devi perdere il "jQuery" alla fine
RedEyedMonster

3
Sei un tale SALVATORE DI VITA !!! Dopo 3 giorni di debug, ho scoperto che questa era la soluzione esatta per il mio problema. Sebbene WordPress stesse caricando il file jQuery, non ho potuto accedere alle funzioni menzionate nel documento pronto. Quindi questa esatta riga di codice è stata jQuery(document).ready(function ($) {risolta per sempre. Grazie mille per la condivisione.
Devner

2
questo è lo stesso problema anche in Drupal. La soluzione funziona anche lì. Grazie
Yogesh Gupta

35

Il mio costrutto preferito senza conflitti:

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

Chiamare jQuery con un puntatore a funzione è una scorciatoia per $ (document) .ready (...)

O come diciamo in coffeescript:

jQuery ($) ->
  # code here

Se $è già un'istanza jquery, qualche motivo per passare jQuerye dargli di $nuovo il nome?
zerkms

2
$ potrebbe non essere un'istanza jQuery se è in conflitto con un'altra libreria - modalità senza conflitti.
Julian

4
È una scorciatoia per $(document).ready(), non$(document).on('load')
Kevin B

Questo ha funzionato per me! Tutte le funzioni custom.js nel mio tema si sono guastate inspiegabilmente. Ho sostituito $ (document) .ready (function () {con questo e ha funzionato come per magia :)
Ira Herman


1

Puoi considerare di sostituire lo script jQuery predefinito di WordPress con la libreria di Google aggiungendo qualcosa di simile al seguente nel file functions.php del tema:

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

Codice tratto da qui: http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/


La migliore soluzione se stai usando plugin JQuery "esterni" al di fuori di WP Downside: - Potrebbe
entrare in

-1

forse hai un codice come questo prima del jquery:

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

e loro erano Conflitto

puoi cambiare $ in (jQuery)


1
L'ho usato come se il var $=jQuery.noConflict();mio fosse una configurazione java-webapp, ma ho ricevuto lo stesso errore!
coding_idiot
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.