TypeError: $ is geen functie bij het aanroepen van de jQuery-functie

Ik heb een eenvoudig jQuery-script in een WordPress-plug-in die een jQuery-wrapper zoals deze gebruikt:

$(document).ready(function(){
    // jQuery code is in here
});

Ik roep dit script aan vanuit het WordPress-dashboard en laad het NADAT het jQuery-framework is geladen.

Als ik de pagina in Firebug controleer, krijg ik constant de foutmelding:

TypeError: $ is geen functie

$(document).ready(function(){

Moet ik het script misschien in deze functie stoppen:

(function($){
    // jQuery code is in here
})(jQuery);

Ik heb deze fout al een paar keer gehad en weet niet zeker hoe ik ermee om moet gaan.

Alle hulp wordt zeer op prijs gesteld.


Antwoord 1, autoriteit 100%

Als u jQuery in WordPress in de wachtrij plaatst, moet u standaard jQuerygebruiken en $wordt niet gebruikt (dit is voor compatibiliteit met andere bibliotheken).

Uw oplossing om het in functionin te pakken, werkt prima, of u kunt jQuery op een andere manier laden (maar dat is waarschijnlijk geen goed idee in WordPress).

Als je document.readymoet gebruiken, kun je eigenlijk $doorgeven aan de functieaanroep:

jQuery(function ($) { ...

Antwoord 2, autoriteit 48%

Dit zou het moeten oplossen:

jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});

Simpel gezegd, WordPress voert zijn eigen scripting uit voordat jij dat kunt en ze geven de $var vrij zodat deze niet in botsing komt met andere bibliotheken. Dit is volkomen logisch, aangezien WordPress wordt gebruikt voor allerlei soorten websites, apps en natuurlijk blogs.

Uit hun documentatie:

De jQuery-bibliotheek die bij WordPress wordt geleverd, is ingesteld op noConflict()
modus (zie wp-includes/js/jquery/jquery.js). Dit is om te voorkomen
compatibiliteitsproblemen met andere JavaScript-bibliotheken die WordPress
kan linken.

In de modus noConflict() is de algemene $ sneltoets voor jQuery niet
beschikbaar…


Antwoord 3, autoriteit 9%

Deze oplossing werkte voor mij

;(function($){
    // your code
})(jQuery);

Verplaats uw code binnen de sluiting en gebruik $in plaats van jQuery

Ik vond de bovenstaande oplossing in https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma

…na teveel zoeken


Antwoord 4, autoriteit 8%

var $=jQuery.noConflict();
$(document).ready(function(){
    // jQuery code is in here
});

Met dank aan Ashwani Panwar en Cyssoo antwoord: https://stackoverflow.com/a/29341144/3010027


Antwoord 5, autoriteit 6%

Je kunt conflicten op deze manier vermijden

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});

6, Autoriteit 4%

Probeer dit:

<script language="JavaScript" type="text/javascript" src="jquery/jquery.js"></script>
<script>
    jQuery.noConflict();
    (function ($) {
        function readyFn() {
            // Set your code here!!
        }
        $(document).ready(readyFn); 
    })(jQuery);
</script>

7, Autoriteit 3%

U moet $ in functie ()

passeren

<script>
jQuery(document).ready(function($){
// jQuery code is in here
});
</script>

8, Autoriteit 3%

Ook vind ik de goede oplossing voor gebruik JQuery Noconflict-modus.

(function($){
  $(document).ready(function(){
      // write code here
  });
  // or also you can write jquery code like this
  jQuery(document).ready(function(){
      // write code here
  });
})(jQuery);

Ik vond deze oplossing van here tryvary.com .


9, Autoriteit 2%

Controleer je jQuery-referenties. Het is mogelijk dat u het meer dan één keer verwijst of u bent uw functie te vroeg bellen (voordat JQuery is gedefinieerd). U kunt proberen zoals vermeld in mijn opmerkingen en een jQuery-referentie bovenaan uw bestand (in het hoofd) plaatsen en zien of dat helpt.

Als u de inkapseling van jQuery gebruikt, moet het in dit geval niet helpen. Probeer het alsjeblieft omdat ik denk dat het mooier en duidelijker is, maar als jQuery niet is gedefinieerd, krijg je dezelfde fouten.

Uiteindelijk … jQuery is momenteel niet gedefinieerd.


10, Autoriteit 2%

Gebruik

jQuery(document).

in plaats van

$(document).

of

Binnen de functie, $ punten naar jQuery zoals u zou verwachten

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

11, Autoriteit 2%

(functie ($) {
 "Gebruik streng";
 $ (functie () {
  // uw code hier
 });
} (jQuery));

12

Wat voor mij werkte. De eerste bibliotheek om te importeren is de querybibliotheek en rechts dan bel de methode jQuery.noconflict ().

<head>
 <script type="text/javascript" src="jquery.min.js"/>
 <script>
  var jq = jQuery.noConflict();
  jq(document).ready(function(){
  //.... your code here
    });
 </script>

13

<script>
var jq=jQuery.noConflict();
(function ($) 
    {
    function nameoffunction()
    {
        // Set your code here!!
    }
    $(document).ready(readyFn); 
    })(jQuery);

gebruik nu jq in plaats van jQuery


Antwoord 14

U komt dit probleem tegen wanneer uw functienaam en een van de id-namen in het bestand hetzelfde zijn. zorg er gewoon voor dat al uw ID-namen in het bestand uniek zijn.


Antwoord 15

U kunt gebruiken

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

of

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

Other episodes