2012-09-04 8 views
27

Ich könnte einen Fehler in einem .js Dokument in einem Thema Kauf Ich habe haben:

$('.tagcloud a').wrap('<span class="st_tag" />'); 

Ich versuche, es zu lösen, aber ich bin kein Programmierer, so I don‘ Ich weiß wie. Die Seite ist dies: http://www.framerental.com.

+0

um ehrlich zu sein, wenn Sie für das Thema bezahlt haben, und Sie haben nicht viele andere Anpassungen auf Ihrer Website (wie du bist kein Programmierer nach al l) Ich würde ihre Unterstützung kontaktieren – TommyBs

Antwort

-3

jQuery fehlt möglicherweise.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>

+0

es ist möglich, aber Wordpress und die meisten CMS der $ ist nicht standardmäßig festgelegt. –

0

Wenn Sie jQuery aufgenommen haben, kann es zu einem Konflikt. Verwenden Sie jQuery anstelle von $.

90

Sie verwenden jQuery.noConflict(); Also $ ist undefined.

Sie können mehr darüber lesen Sie hier docs

versuchen, Ihren Code auf diese Weise zu ändern ($ Zeichen-Ready-Funktion hinzugefügt werden):

jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
}); 
+0

ok !! Jetzt funktioniert etwas, aber ein anderer Fehler ist aufgetreten: Referenceerror resiza window ist nicht definiert. Zeile: jQuery (Fenster) .bind ("resize", resizeWindow); Funktion resizeWindow (e) { var newWindowWidth = jQuery (Fenster) .width(); – user1645326

+0

Versuchen Sie, die Funktion vor dem Bind-Ausdruck zu definieren. – jurka

+0

Das behebt alle meine Fehler mit einem alten WP-Thema, nachdem ich das alte "eingereihte" jQuery des Themas auskommentiert habe. Ehrlich gesagt finde ich das System "wp_enqueue_script" wirklich nervig, künstlich, überkompliziert und unnötig. Ich wünschte, WordPress würde seinen eigenen js-Code für die Admin-Panels verstecken und unterteilen, und wir würden jQuery nicht benutzen, wie wir es benutzen wollen. Übergibt "wp_enqueue_script" Google PageSpeed ​​Insight-Tests? Wahrscheinlich nicht. Entweder das oder einfach alle WP-Plugins und Themes, um die gleiche jQuery zu verwenden - dann wären alle auf der gleichen Seite und wir könnten alle zusammen vorwärts gehen. –

9

Entweder Sie darunter nicht jquery Toolkit/lib , wie einige vorgeschlagen haben, oder es gibt einen Konflikt von Art. Zum Test: include jQuery und Test wie folgt aus:

console.log($); 
console.log($ === jQuery); 

Wenn $ nicht undefiniert ist, und $ === jQuery Protokolle falsch, Sie haben definitiv einen Konflikt auf der Hand. Ersetzen Sie Ihre $ durch jQuery löst das, aber das kann ziemlich mühsam sein (all die zusätzliche Eingabe ...). Generell starte ich meine Skripte mit $jq = _$ = jQuery;, um zumindest einen kürzeren Verweis auf das jQuery-Objekt zu haben.
Natürlich, bevor Sie das tun, wenn Sie nicht aus Versehen sind zu sehen Variablen überschrieben, die zuvor festgelegt wurden: console.log($jq, _jQ, _$); je nachdem, was nichtundefined ist, sollte in Ruhe gelassen werden, natürlich

+0

Elias Sie scheinen die Antwort zu haben, aber solange ich kein Programmierer bin, fühle ich mich wie Sie in Chinesisch sprechen. Gibt es eine einfache Lösung für mich? Ich bin komplett verloren :-( – user1645326

+0

@ user1645326: Ja, da ist. Ihr Kommentar unter Jurkas Antwort sagt mir, dass Sie entweder nicht alle jQ-Code innerhalb des Wrappers schreiben 'jQuery (document) .ready (function ($) { 'Funktion, die Sie sollten. Auch sollte das' resizeWindow' sein mit bekommen von '$ (this) .width();' anstatt 'jQuery (window) .with();' aber vielleicht am wichtigsten: der Fehler sagt Es ist ein Tippfehler in Ihrem Code: Suchen Sie einfach Ihren Code für "resiza window", und ersetzen Sie es durch "resizeWindow" ... –

23

Funktionsfehler eine gemeinsame Sache sind in fast allen Content-Management-Systemen und es gibt ein paar Möglichkeiten, wie Sie damit umgehen können.

  1. Wickeln Sie Ihr Code:

    <script> 
    jQuery(function($) { 
    
    YOUR CODE GOES HERE 
    
    }); 
    </script> 
    
  2. Sie können auch jQuery API noConflict();

    <script> 
    $.noConflict(); 
    jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
    }); 
    // Code that uses other library's $ can follow here. 
    </script> 
    
  3. Ein weiteres Beispiel für die Verwendung noConflict verwenden, ohne Dokument bereit:

    <script> 
    jQuery.noConflict(); 
        (function($) { 
         $(function() { 
          // YOUR CODE HERE 
         }); 
        }); 
    </script> 
    
  4. Sie können sogar wählen Sie Ihre sehr Alias ​​erstellen um Konflikte zu vermeiden, wie so:

    var jExample = jQuery.noConflict(); 
    // Do something with jQuery 
    jExample("div p").hide(); 
    
  5. Noch eine andere längere Lösung zu benennen ist, alle referances von $ zu jQuery:

    $("div p").hide();-jQuery("div p").hide();

6

einfach hinzufügen:

<script> 
var $ = jQuery.noConflict(); 
</script> 

an die Kopf-Tag in header.php. Oder wenn Sie das Dollarzeichen im Admin-Bereich (oder irgendwo, wo header.php nicht verwendet wird) verwenden wollen, direkt vor dem Ort, an dem Sie es verwenden möchten.

(Es könnte einige Konflikte sein, dass ich es nicht bewusst bin, testen und wenn es, verwenden Sie die anderen Lösungen hier oder auf den Link unten angeboten.)

Quelle: http://www.wpdevsolutions.com/use-the-dollar-sign-in-wordpress-instead-of-jquery/

+0

Dies funktioniert, wenn Sie Ihre eigenen benutzerdefinierten Themen-Skripte in der Fußzeile Enqueue – Turbojohan

9

Statt dies zu tun:

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

sollten Sie dies tun:

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

    // your code goes here 

}); 

Dies liegt daran, dass WordPress in der Zukunft oder jetzt $ für etwas anderes als jQuery verwenden kann. Daher müssen Sie jQuery so laden, dass das $ nur in einem jQuery-Dokument-Bereit-Callback verwendet werden kann.

+0

Das funktioniert gut für alles innerhalb der doc.ready.Wenn Sie es auf der ganzen Linie (Fensterfunktionen) wollen, sehen Savage's Antwort oben. – cbloss793

4

Ich habe eine benutzerdefinierte Skriptdatei, die am Ende des head Abschnitt geladen, und die folgende an der Spitze eingefügt:

(function (jQuery) { 
    window.$ = jQuery.noConflict(); 
})(jQuery); 

(Dies ist eine Modifikation des Fanky Antwort)

2

Anders als noConflict, ist dies ebenfalls hilfreich sein:

(function($) { 
    // Variables and DOM Caching using $. 
    var body = $('body'); 
    console.log(body); 
})(jQuery); 
+0

Das ist toll! Tut der Trick, danke. – Andy

Verwandte Themen