Đã một thời gian kể từ khi tôi làm việc với jQuery; Tôi nghĩ tôi đang mắc một sai lầm ngu ngốc.
Dưới đây là một tiện ích Django:
class FooWidget(Widget):
# ...
class Media:
js = ('js/foowidget.js',)
Dưới đây là file .js:
alert("bar");
$(document).ready(function() {
alert("omfg");
$('.foo-widget').click(function() {
alert("hi");
return false;
});
});
alert("foo");
Các chỉ alert()
rằng đám cháy là người đầu tiên. Tôi có lỗi cú pháp ngu ngốc hay gì đó không?
Ngoài ra, nếu một số khác bao gồm tập lệnh trên trang xác định lại $(document).ready
, tôi có phải lo lắng về điều đó không? Tôi đoán rằng các định nghĩa sau này sẽ ghi đè lên tôi, vì vậy nó an toàn hơn cho các định nghĩa tiếp theo để làm một cái gì đó như:
$(document).ready(function() {
document.ready()
// real stuff
});
jQuery đã được bao gồm trong trang bằng cách lần foowidget.js
là.
Cập nhật: Dựa vào liên kết @ lazerscience, tôi thử như sau thay vào đó, nhưng nó vẫn không giống như trước:
alert("bar");
$(function() {
alert("omfg");
$(".set-widget").click(function() {
alert("hi");
return false;
});
});
alert("foo");
Cập nhật 2: Thật kỳ lạ, khi tôi làm:
alert($);
Tôi nhận được "không xác định". Điều này cho thấy jQuery thực sự không được khởi tạo. Điều này confuses me, vì <head>
bao gồm:
<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>
Không đưa kịch bản của tôi sau khi kịch bản jQuery đảm bảo rằng $
sẽ được xác định?
Cập nhật 3: từ 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? /* ... */
Trông đúng với tôi.
Đây là từ Firebug console:
Error: $ is not a function
[Break On This Error] $(function() {
foowidget.js (line 5)
>>> $
anonymous()
>>> jQuery
undefined
>>> $('a')
null
>>> $(document)
null
Cập nhật 4: $
được xác định trên tất cả các trang của trang web Django của tôi ngoại trừ ứng dụng quản trị. Odd ...
Cập nhật 5: Điều này thật thú vị.
jQuery.init.js:
// Puts the included jQuery into our own namespace
var django = {
"jQuery": jQuery.noConflict(true)
};
Từ giao diện điều khiển:
>>> $
anonymous()
>>> django
Object {}
>>> django.jQuery
function()
>>> django.jQuery('a')
[a /admin/p..._change/, a /admin/logout/, a ../../, a ../, a.addlink add/]
Bạn có sử dụng bất kỳ công cụ nhà phát triển nào như Firebug hoặc Công cụ nhà phát triển Chrome không? –
Bạn nên xác nhận rằng thẻ script /media/js/jquery.min.js thực sự trả về thư viện jquery. – Andrew
Tôi đã xem tệp. Nó dường như là thư viện jQuery, mặc dù tôi đã không làm một sự khác biệt. –