Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
112
rated 0 times [  114] [ 2]  / answers: 1 / hits: 20140  / 14 Years ago, mon, january 17, 2011, 12:00:00

It's been a while since I worked with jQuery; I think I'm making a stupid mistake.



Here is a Django widget:



class FooWidget(Widget):

# ...

class Media:
js = ('js/foowidget.js',)


Here is the .js file:



alert(bar);

$(document).ready(function() {
alert(omfg);
$('.foo-widget').click(function() {
alert(hi);
return false;
});
});

alert(foo);


The only alert() that fires is the first. Do I have a stupid syntax error or something?



Also, if some other included script on the page redefines $(document).ready, do I have to worry about it? I'm guessing that subsequent definitions will override mine, so it's safer for subsequent definitions to do something like:



$(document).ready(function() {
document.ready()
// real stuff
});


jQuery is already included in the page by the time foowidget.js is.



Update: Based on @lazerscience's link, I tried the following instead, but it still fails just as before:



alert(bar);

$(function() {
alert(omfg);
$(.set-widget).click(function() {
alert(hi);
return false;
});
});

alert(foo);


Update 2: Curiously, when I do:



alert($);


I get undefined. This suggests that jQuery is actually not initialized. This confuses me, because the <head> includes:



<script type=text/javascript src=/media/js/jquery.min.js></script>
<script type=text/javascript src=/media/js/jquery.init.js></script>
<script type=text/javascript src=/media/js/actions.min.js></script>
<script type=text/javascript src=/static/js/foowidget.js></script>


Doesn't putting my script after the jQuery scripts ensure that $ will be defined?



Update 3: from jquery.min.js:



/*!
* jQuery JavaScript Library v1.4.2
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Sat Feb 13 22:33:48 2010 -0500
*/
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll(left)}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:script}):c.globalEval(b.text||b.textContent||b.innerHTML||);b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b===object){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i? /* ... */


Looks correct to me.



This is from the Firebug console:



Error: $ is not a function
[Break On This Error] $(function() {
foowidget.js (line 5)
>>> $
anonymous()
>>> jQuery
undefined
>>> $('a')
null
>>> $(document)
null


Update 4: $ is defined on all page of my Django site except the admin app. Odd...



Update 5: This is interesting.



jQuery.init.js:



// Puts the included jQuery into our own namespace
var django = {
jQuery: jQuery.noConflict(true)
};


From the console:



>>> $
anonymous()
>>> django
Object {}
>>> django.jQuery
function()
>>> django.jQuery('a')
[a /admin/p..._change/, a /admin/logout/, a ../../, a ../, a.addlink add/]

More From » python

 Answers
21

You can use $(document).ready() as often as you want to on one page. It doesn't redefine anything as you call it, but the call of ready() adds functions that are called when the document is ready.
To debug your code eg. use Firebug that will show you more detailled information about where the error occurs if there's any!


[#94201] Friday, January 14, 2011, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
zahrafrancisr

Total Points: 176
Total Questions: 105
Total Answers: 99

Location: Svalbard and Jan Mayen
Member since Sun, Sep 25, 2022
2 Years ago
;