I am using a jQuery based WordPress Twitter widget and receive the error "ReferenceError: _ is not defined
".
Am not sure how to declare the variable "_".
Here is the widget:
<script type="text/javascript"> <!--//--><![CDATA[//><!-- function twitterCallback2(twitters) { var statusHTML = []; for (var i=0; i<twitters.length; i++){ var username = twitters[i].user.screen_name; var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) { return '<a href="'+url+'">'+url+'</a>'; }).replace(/\B@([_a-z0-9]+)/ig, function(reply) { return reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>'; }); statusHTML.push( '\ <li class="tweet">\ <span class="content">'+status+'\ <a style="font-size:85%" class="time" href="http://twitter.com/'+username+'/statuses/'+twitters[i].id_str+'">('+relative_time(twitters[i].created_at)+')</a></span>\ <div class="clearfix"></div></li>' ); } document.getElementById('twitter_update_list_<?php echo $unique_id; ?>').innerHTML = statusHTML.join(''); var template = '\ <span class="author">\ <img src="<%= user.profile_image_url %>"> \ <a class="username" href="http://twitter.com/<%= user.screen_name %>">\ <strong><%= user.screen_name %></strong>\ </a>\ </span>'; jQuery( _.template( template, { user: twitters[0].user } )).insertAfter('.bizsteam_twitter ul'); } function relative_time(time_value) { var values = time_value.split( " " ); time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3]; var parsed_date = Date.parse(time_value); var relative_to = (arguments.length > 1) ? arguments[1] : new Date(); var delta = parseInt((relative_to.getTime() - parsed_date) / 1000); delta = delta + (relative_to.getTimezoneOffset() * 60); if (delta < 60) { return 'less than a minute ago'; } else if(delta < 120) { return 'about a minute ago'; } else if(delta < (60*60)) { return (parseInt(delta / 60)).toString() + ' minutes ago'; } else if(delta < (120*60)) { return 'about an hour ago'; } else if(delta < (24*60*60)) { return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago'; } else if(delta < (48*60*60)) { return '1 day ago'; } else { return (parseInt(delta / 86400)).toString() + ' days ago'; } } //-->!]]> </script> <?php if($exclude_replies != ''){ $exclude_replies_str = '&exclude_replies='.$exclude_replies; } else { $exclude_replies_str = ''; } ?> <script type="text/javascript" src="http://api.twitter.com/1/statuses/user_timeline/<?php echo $twitter_username; ?>.json?callback=twitterCallback2&count=<?php echo $twitter_count; ?>&include_rts=t<?php echo $exclude_replies_str; ?>"></script>
Firebug states that the line of code with the error is:
jQuery( _.template( template, { user: twitters[0].user } )).insertAfter('.bizsteam_twitter ul');
Any help would be greatly appreciated
Answer: Execute Code after jQuery Library has Loaded The most common reason behind the error "Uncaught ReferenceError: $ is not defined" is executing the jQuery code before the jQuery library file has loaded. Therefore make sure that you're executing the jQuery code only after jQuery library file has finished loading.
The ReferenceError object represents an error when a variable that doesn't exist (or hasn't yet been initialized) in the current scope is referenced. ReferenceError is a serializable object, so it can be cloned with structuredClone() or copied between Workers using postMessage() .
Basically $ is an alias of jQuery() so when you try to call/access it before declaring the function, it will endup throwing this $ is not defined error . This usually indicates that jQuery is not loaded and JavaScript does not recognize the $. Even with $(document).
not defined: In JavaScript, it is one of the reference errors that JavaScript will throw when someone accesses the variable which is not inside the memory heap.
Your widget has Underscore.js/LoDash.js as dependency.
You can get them here: underscore, lodash
Try prepending this to your code, so you can see if it works:
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/0.10.0/lodash.min.js"></script>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With