$ nicht mit jQuery in WordPress definiert

32

Ich weiß, dass jQuery geladen ist, weil ich das $für 'jQuery' ausschalten kann und alles sich wie erwartet verhält, aber dies ist ein chaotisches Skript, wenn ich das nicht beheben kann

Dieses Skript:

jQuery(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })
});

Erzeugt den Fehler $ is not a function

Dieses Skript:

jQuery(document).ready(function(){
    jQuery("ul.vimeo_desc_feed li a").click(function(){
        alert(jQuery(this).attr('href'));
        return false;
    })
});

funktioniert gut.

Milder Flaum
quelle

Antworten:

42

Sie können Ihr Javascript in eine selbstaufrufende Funktion einbinden und diese dann jQueryals Argument übergeben und $als lokalen Variablennamen verwenden. Beispielsweise:

(function($) {
  $(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
      alert($(this).attr('href'));
      return false;
    })
 });
}(jQuery));

sollte wie vorgesehen funktionieren.

Wenn ich mich richtig erinnere, versetzt die von WP bereitgestellte Version von jQuery (diejenige, die Sie erhalten, wenn Sie sie verwenden wp_enqueue_script('jquery')) jQuery sofort in einen konfliktfreien Zustand, wodurch $sie undefiniert wird.

niemand
quelle
aah, ich verstehe. Ich habe es von Hand hinzugefügt, was erklärt, warum ich auf dieses Problem nicht gestoßen bin.
Mild Fuzz
Vielen Dank, ich habe das alternative Format mit jQuery am Anfang und nicht am Ende verwendet. Ich konnte jedoch nicht herausfinden, wie ein Wert zurückgegeben werden kann. Bei diesem Format habe ich Return vor der selbstaufrufenden Funktion hinzugefügt, und es funktioniert.
Eselk
Sehr nützliche Antwort.
MarkSkayff
32

Du bist fast da!

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});

Sie müssen einen Verweis auf jQuery als $Funktion an Ihre Methode übergeben, da dies sonst nicht funktioniert. Wenn Sie beim ersten function()Aufruf wie oben ein $ setzen , funktioniert alles einwandfrei.

EAMann
quelle
4
+1: Das ist lesbarer als jQueryam Ende zu setzen.
fuxia
1
... aber es ist nicht die Standardmethode für anonyme Funktionen. forum.jquery.com/topic/jquery-anonymous-function-calls
BryanH
5
Ja und nein. Sie werden beide als "Standard" angesehen. Man erstellt eine Singleton-Klasse, $die lokal definiert wurde. Der andere definiert lediglich einen Handler für das readyEreignis des Dokuments und übergibt das jQuery-Objekt an den Handler als $. Wenn Sie versuchen, eine Verbindung zum readyEreignis herzustellen, wird die zweite Methode häufiger verwendet. Wenn Sie jQuery für einen anderen Zweck benötigen (zum $.browserBeispiel um sich anzumelden), würden Sie eine Singleton-Klasse verwenden.
EAMann
+1 für jQuery (document) .ready (function ($) {... mehr Infos zu jquery und WordPress können Sie auch in meinem Post lesen: wpengineer.com/2028/small-tips-using-wordpress-and-jquery .
Bueltge
6

Das Übergeben einer Funktion an jQuery ist eine Abkürzung. Indem Sie $(document).ready(...)sie $als ersten Parameter Ihres Rückrufs platzieren, erstellen Sie einen Alias ​​für jQuery in diesem Rückruf:

jQuery(function($) {
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    });
});

Die Dokumentation dazu finden Sie hier .

rohmann
quelle