2011-01-17 13 views
8

jQueryを扱って以来、しばらくお待ちください。私は愚かな間違いをしていると思う。ここで

は、Djangoのウィジェットです:

alert("bar"); 

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

alert("foo"); 

のみalert()火災が最初である:ここでは

class FooWidget(Widget): 

    # ... 

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

は.jsファイルです。私は愚かな構文エラーまたは何かを持っていますか?

また、ページ上の他のスクリプトが$(document).readyを再定義すると、心配する必要はありますか? jQueryのは、すでにfoowidget.jsがある時点でページに含まれる

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

:私はそれのような何かをする、後続の定義については安全ですので、その後の定義は、鉱山を上書きすることを推測しています。

更新:@のlazerscienceのリンクに基づいて、私の代わりに、以下を試してみましたが、それはまだただ以前のように失敗します。

alert("bar"); 

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

alert("foo"); 

はアップデート2:私は不思議なことに、:

alert($); 

「未定義」になります。これは、jQueryが実際には初期化されていないことを示しています。

<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> 

は、jQueryのスクリプトが$が定義されていることを確認した後、私のスクリプトを入れていません:<head>が含まれるので、これは、私を混乱させる?

アップデート3: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? /* ... */ 

は、私には正しく見えます。

これは、Firebugのコンソールから次のとおりです。

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

更新4$は、管理アプリを除いて、私のDjangoのサイトのすべてのページで定義されています。奇数...

更新5:これは興味深いものです。

jQuery.init.js

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

コンソールから:

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

FirebugやChrome Developer Toolsのような開発ツールを使用していますか? –

+0

/media/js/jquery.min.jsスクリプトタグが実際にjqueryライブラリを返すことを確認する必要があります。 – Andrew

+0

ファイルを見ました。私はdiffをしませんでしたが、jQueryライブラリのようです。 –

答えて

1

あなたは$(document).ready()as often as you want to on one pageを使用することができます。は、それを呼び出すときには何でもを再定義しませんが、ready()の呼び出しでは、「ドキュメントが準備完了」のときに呼び出される関数が追加されます。 コードをデバッグする。 Firebugを使用すると、エラーが発生した場合の詳細情報が表示されます。

+0

Firebugは$が未定義であると嘆いています(上記参照) –

+13

djangoによって読み込まれたjQueryを使用している場合は、コードを '(function($){ //あなたのコードはここに... })(django.jQuery); '! –

0

Firefoxでは、ページのソースコードを表示し、リンク「/media/js/jquery.min.js」をクリックして読み込まれているかどうかを確認します。ほとんどの場合、メディアURLを正しく定義していないため、404が表示されている可能性があります。

この目的で開発サーバーを使用することもできます。すべての要求とHTTPステータスコードが返されます。

+0

私はチェックして、それは404ingではありません。上に更新したように、jQueryコードです。 –

3

FirebugまたはWeb Inspector JSコンソールを使用して、$および/またはjQueryと入力します。これは、ライブラリが正しくロードされているかどうかを調べる最も簡単な方法です。唯一のjQueryが定義されているとは考えにくい場合には、あなたがそれ自身のスコープにスクリプトをラップすることができます

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

何もコンソールで定義されていない場合、問題はファイルと、最も可能性が高いと私はAndiDogのを試してみました何かが全くロードされていないかどうかを確認するアプローチ。

+0

あなたが正しいです、コンソールは問題を明らかにします。 (OPが更新されました) –

+0

プロトタイプなど、$を使用する別のライブラリを含むことがありますか? – polarblau

-1

テンプレートに{{ form.media }}を含めるのを忘れた可能性があります。

+0

オペレーションに「

20

私の.jsファイルの先頭にこれを追加すると、それが修正されています。

var $ = django.jQuery; 

私は私のプロジェクトは、任意のスクリプトが含まれていないことを考えると、jquery.init.jsファイルを削除するかどうかはわかりませんそれは$をjQuery以外のものに使用します。

3

私はあなたが以下の行を追加し、このファイルにjquery.init.js(管理者からしばしばそのjquery.init.js)を含める必要があり、このようにこの問題を解決:

var django = { 
    "jQuery": jQuery.noConflict(true) 
}; 
var jQuery = django.jQuery; 
var $=jQuery; 

uはを持っています全体のワークスペースjqueryと$。より良いコードを探して私は自分のjqueryのinitファイルをプロジェクトで作成することを好む。

関連する問題