I have a simple jQuery script in a WordPress plugin that is using a jQuery wrapper like this:
$(document).ready(function(){
// jQuery code is in here
});
I am calling this script from within the WordPress Dashboard and am loading it AFTER the jQuery framework has loaded.
When I check the page in Firebug I constantly keep receiving the error message:
TypeError: $ is not a function
$(document).ready(function(){
Should I maybe wrap the script in this function:
(function($){
// jQuery code is in here
})(jQuery);
I have had this error quite a few times and am not sure how to handle it.
Any help would be greatly appreciated.
By default when you enqueue jQuery in WordPress you must use
jQuery
, and$
is not used (this is for compatibility with other libraries).Your solution of wrapping it in
function
will work fine, or you can load jQuery some other way (but that’s probably not a good idea in WordPress).If you must use
document.ready
, you can actually pass$
into the function call:This should fix it:
Put simply, WordPress runs their own scripting before you can and they release the
$
var so it won’t collide with other libraries. This makes total sense, as WordPress is used for all kinds of web sites, apps, and of course, blogs.From their documentation:
This solution worked for me
Move your code inside the closure and use
$
instead ofjQuery
I found the above solution in https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma
…after searching too much
Credit to Ashwani Panwar and Cyssoo answer: https://stackoverflow.com/a/29341144/3010027
Reasons why in WordPress jQuery and not $ is used: https://pippinsplugins.com/why-loading-your-own-jquery-is-irresponsible/
You can avoid confliction like this
Try this:
Also, I find the good solution for use jQuery noConflict mode.
I found this solution from here TryVary.com.
You have to pass $ in function()
replace
$
sign withjQuery
like this:
Double check your jQuery references. It is possible that you are either referencing it more than once or you are calling your function too early (before jQuery is defined). You can try as mentioned in my comments and put any jQuery reference at the top of your file (in the head) and see if that helps.
If you use the encapsulation of jQuery it shouldn’t help in this case. Please try it because I think it is prettier and more obvious, but if jQuery is not defined you will get the same errors.
In the end… jQuery is not currently defined.
Use
instead of
or
Within the function, $ points to jQuery as you would expect
What worked for me. The first library to import is the query library and right then call the jQuery.noConflict() method.
now use jq in place of jQuery
You come across this issue when your function name and one of the id names in the file are same. just make sure all your id names in the file are unique.
You can use
or
If you are using jquery for frontend, you can achieve it by passing $deps as jquery