jQuery Uncaught TypeError: Die Eigenschaft '$' des Objekts [Objektfenster] ist keine Funktion

92

Insgesamt habe ich eine vorbündelte JS / CSS-Formularanwendung heruntergeladen und versuche, sie in Wordpress zu verwenden. Ich habe folgenden Code:

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


});

Ich ging davon aus, dass der Wordpress-Konflikt kein Problem verursacht, und habe die letzte Klammer so aktualisiert, dass sie wie folgt aussieht:

}, "jQuery");

Ich erhalte jedoch immer noch den gleichen Fehler. Weiß jemand, was dieses Problem auslösen würde und wie es gelöst werden kann?

Danke im Voraus!

user1048676
quelle

Antworten:

260

Dies ist ein Syntaxproblem. Die in WordPress enthaltene jQuery-Bibliothek wird im Modus "Kein Konflikt" geladen. Dies soll Kompatibilitätsprobleme mit anderen Javascript-Bibliotheken verhindern, die WordPress laden kann. Im "No-Confict" -Modus ist die Verknüpfung $ nicht verfügbar und die längere jQuery wird verwendet, d. H.

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

Durch Einfügen des $ in Klammern nach dem Funktionsaufruf können Sie diese Verknüpfung dann im Codeblock verwenden.

Ausführliche Informationen finden Sie im WordPress-Codex

RedEyedMonster
quelle
Ich sollte hinzufügen, dass Sie die "jQuery" am Ende
verlieren müssen
3
Du bist so ein LEBENSRETTER !!! Nach 3 Tagen Debugging stellte ich fest, dass dies die genaue Lösung für mein Problem war. Obwohl WordPress die jQuery-Datei lud, konnte ich nicht auf die im Dokument genannten Funktionen zugreifen. Diese genaue Codezeile hat sie also jQuery(document).ready(function ($) {endgültig behoben. Vielen Dank für das Teilen.
Devner
2
Dies ist das gleiche Problem auch in Drupal. Die Lösung funktioniert auch dort. Vielen Dank
Yogesh Gupta
35

Mein Lieblingskonstrukt ohne Konflikte:

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

Das Aufrufen von jQuery mit einem Funktionszeiger ist eine Verknüpfung für $ (document) .ready (...)

Oder wie wir im Coffeescript sagen:

jQuery ($) ->
  # code here
julianisch
quelle
Wenn $es sich bereits um eine jquery-Instanz handelt - gibt es einen Grund, sie zu übergeben jQueryund ihr $noch einmal den Namen zu geben ?
Zerkms
2
$ ist möglicherweise keine jQuery-Instanz, wenn sie mit einer anderen Bibliothek in Konflikt steht - kein Konfliktmodus.
Julian
4
Es ist eine Abkürzung zu $(document).ready(), nicht$(document).on('load')
Kevin B
Das hat bei mir funktioniert! Alle custom.js-Funktionen in meinem Theme sind unerklärlich kaputt gegangen. Ich habe das $ (Dokument) .ready (function () {durch dieses ersetzt und es hat wie Magie funktioniert :)
Ira Herman
6

In Wordpress einfach ersetzen

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

mit

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

Sie können in Betracht ziehen, das Standard-WordPress-jQuery-Skript durch Google Library zu ersetzen, indem Sie der Datei theme functions.php Folgendes hinzufügen:

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

Code von hier übernommen: http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/

p.voinov
quelle
Beste Lösung, wenn Sie "externe" JQuery-Plugins außerhalb von WP Downside verwenden: - Könnte - Konflikt mit einigen Wordpress-Plugins - nichts auf meiner Seite bemerkt
RunsnbunsN
-1

Vielleicht haben Sie Code wie diesen vor der Abfrage:

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

und sie war Konflikt

Sie können $ in (jQuery) ändern.

S-Kias
quelle
1
Ich habe es so benutzt, als wäre var $=jQuery.noConflict();Mine ein Java-Webapp-Setup, aber ich habe den gleichen Fehler bekommen!
Coding_idiot